/*** Autogenerated by WIDL 10.15 from /home/runner/build_wine/wine/include/d2d1_3.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __d2d1_3_h__
#define __d2d1_3_h__

/* Forward declarations */

#ifndef __ID2D1InkStyle_FWD_DEFINED__
#define __ID2D1InkStyle_FWD_DEFINED__
typedef interface ID2D1InkStyle ID2D1InkStyle;
#ifdef __cplusplus
interface ID2D1InkStyle;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Ink_FWD_DEFINED__
#define __ID2D1Ink_FWD_DEFINED__
typedef interface ID2D1Ink ID2D1Ink;
#ifdef __cplusplus
interface ID2D1Ink;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1GradientMesh_FWD_DEFINED__
#define __ID2D1GradientMesh_FWD_DEFINED__
typedef interface ID2D1GradientMesh ID2D1GradientMesh;
#ifdef __cplusplus
interface ID2D1GradientMesh;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1ImageSource_FWD_DEFINED__
#define __ID2D1ImageSource_FWD_DEFINED__
typedef interface ID2D1ImageSource ID2D1ImageSource;
#ifdef __cplusplus
interface ID2D1ImageSource;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1ImageSourceFromWic_FWD_DEFINED__
#define __ID2D1ImageSourceFromWic_FWD_DEFINED__
typedef interface ID2D1ImageSourceFromWic ID2D1ImageSourceFromWic;
#ifdef __cplusplus
interface ID2D1ImageSourceFromWic;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1TransformedImageSource_FWD_DEFINED__
#define __ID2D1TransformedImageSource_FWD_DEFINED__
typedef interface ID2D1TransformedImageSource ID2D1TransformedImageSource;
#ifdef __cplusplus
interface ID2D1TransformedImageSource;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1LookupTable3D_FWD_DEFINED__
#define __ID2D1LookupTable3D_FWD_DEFINED__
typedef interface ID2D1LookupTable3D ID2D1LookupTable3D;
#ifdef __cplusplus
interface ID2D1LookupTable3D;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1SpriteBatch_FWD_DEFINED__
#define __ID2D1SpriteBatch_FWD_DEFINED__
typedef interface ID2D1SpriteBatch ID2D1SpriteBatch;
#ifdef __cplusplus
interface ID2D1SpriteBatch;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1SvgGlyphStyle_FWD_DEFINED__
#define __ID2D1SvgGlyphStyle_FWD_DEFINED__
typedef interface ID2D1SvgGlyphStyle ID2D1SvgGlyphStyle;
#ifdef __cplusplus
interface ID2D1SvgGlyphStyle;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DeviceContext2_FWD_DEFINED__
#define __ID2D1DeviceContext2_FWD_DEFINED__
typedef interface ID2D1DeviceContext2 ID2D1DeviceContext2;
#ifdef __cplusplus
interface ID2D1DeviceContext2;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DeviceContext3_FWD_DEFINED__
#define __ID2D1DeviceContext3_FWD_DEFINED__
typedef interface ID2D1DeviceContext3 ID2D1DeviceContext3;
#ifdef __cplusplus
interface ID2D1DeviceContext3;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DeviceContext4_FWD_DEFINED__
#define __ID2D1DeviceContext4_FWD_DEFINED__
typedef interface ID2D1DeviceContext4 ID2D1DeviceContext4;
#ifdef __cplusplus
interface ID2D1DeviceContext4;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1ColorContext1_FWD_DEFINED__
#define __ID2D1ColorContext1_FWD_DEFINED__
typedef interface ID2D1ColorContext1 ID2D1ColorContext1;
#ifdef __cplusplus
interface ID2D1ColorContext1;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DeviceContext5_FWD_DEFINED__
#define __ID2D1DeviceContext5_FWD_DEFINED__
typedef interface ID2D1DeviceContext5 ID2D1DeviceContext5;
#ifdef __cplusplus
interface ID2D1DeviceContext5;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DeviceContext6_FWD_DEFINED__
#define __ID2D1DeviceContext6_FWD_DEFINED__
typedef interface ID2D1DeviceContext6 ID2D1DeviceContext6;
#ifdef __cplusplus
interface ID2D1DeviceContext6;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DeviceContext7_FWD_DEFINED__
#define __ID2D1DeviceContext7_FWD_DEFINED__
typedef interface ID2D1DeviceContext7 ID2D1DeviceContext7;
#ifdef __cplusplus
interface ID2D1DeviceContext7;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Device2_FWD_DEFINED__
#define __ID2D1Device2_FWD_DEFINED__
typedef interface ID2D1Device2 ID2D1Device2;
#ifdef __cplusplus
interface ID2D1Device2;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Device3_FWD_DEFINED__
#define __ID2D1Device3_FWD_DEFINED__
typedef interface ID2D1Device3 ID2D1Device3;
#ifdef __cplusplus
interface ID2D1Device3;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Device4_FWD_DEFINED__
#define __ID2D1Device4_FWD_DEFINED__
typedef interface ID2D1Device4 ID2D1Device4;
#ifdef __cplusplus
interface ID2D1Device4;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Device5_FWD_DEFINED__
#define __ID2D1Device5_FWD_DEFINED__
typedef interface ID2D1Device5 ID2D1Device5;
#ifdef __cplusplus
interface ID2D1Device5;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Device6_FWD_DEFINED__
#define __ID2D1Device6_FWD_DEFINED__
typedef interface ID2D1Device6 ID2D1Device6;
#ifdef __cplusplus
interface ID2D1Device6;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Device7_FWD_DEFINED__
#define __ID2D1Device7_FWD_DEFINED__
typedef interface ID2D1Device7 ID2D1Device7;
#ifdef __cplusplus
interface ID2D1Device7;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Factory3_FWD_DEFINED__
#define __ID2D1Factory3_FWD_DEFINED__
typedef interface ID2D1Factory3 ID2D1Factory3;
#ifdef __cplusplus
interface ID2D1Factory3;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Factory4_FWD_DEFINED__
#define __ID2D1Factory4_FWD_DEFINED__
typedef interface ID2D1Factory4 ID2D1Factory4;
#ifdef __cplusplus
interface ID2D1Factory4;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Factory5_FWD_DEFINED__
#define __ID2D1Factory5_FWD_DEFINED__
typedef interface ID2D1Factory5 ID2D1Factory5;
#ifdef __cplusplus
interface ID2D1Factory5;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Factory6_FWD_DEFINED__
#define __ID2D1Factory6_FWD_DEFINED__
typedef interface ID2D1Factory6 ID2D1Factory6;
#ifdef __cplusplus
interface ID2D1Factory6;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Factory7_FWD_DEFINED__
#define __ID2D1Factory7_FWD_DEFINED__
typedef interface ID2D1Factory7 ID2D1Factory7;
#ifdef __cplusplus
interface ID2D1Factory7;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Factory8_FWD_DEFINED__
#define __ID2D1Factory8_FWD_DEFINED__
typedef interface ID2D1Factory8 ID2D1Factory8;
#ifdef __cplusplus
interface ID2D1Factory8;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1CommandSink2_FWD_DEFINED__
#define __ID2D1CommandSink2_FWD_DEFINED__
typedef interface ID2D1CommandSink2 ID2D1CommandSink2;
#ifdef __cplusplus
interface ID2D1CommandSink2;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1CommandSink3_FWD_DEFINED__
#define __ID2D1CommandSink3_FWD_DEFINED__
typedef interface ID2D1CommandSink3 ID2D1CommandSink3;
#ifdef __cplusplus
interface ID2D1CommandSink3;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1CommandSink4_FWD_DEFINED__
#define __ID2D1CommandSink4_FWD_DEFINED__
typedef interface ID2D1CommandSink4 ID2D1CommandSink4;
#ifdef __cplusplus
interface ID2D1CommandSink4;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <d2d1_2.h>
#include <d2d1effects_2.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __IDWriteFontFace_FWD_DEFINED__
#define __IDWriteFontFace_FWD_DEFINED__
typedef interface IDWriteFontFace IDWriteFontFace;
#ifdef __cplusplus
interface IDWriteFontFace;
#endif /* __cplusplus */
#endif

typedef enum D2D1_INK_NIB_SHAPE {
    D2D1_INK_NIB_SHAPE_ROUND = 0x0,
    D2D1_INK_NIB_SHAPE_SQUARE = 0x1,
    D2D1_INK_NIB_SHAPE_FORCE_DWORD = 0xffffffff
} D2D1_INK_NIB_SHAPE;
typedef enum D2D1_PATCH_EDGE_MODE {
    D2D1_PATCH_EDGE_MODE_ALIASED = 0x0,
    D2D1_PATCH_EDGE_MODE_ANTIALIASED = 0x1,
    D2D1_PATCH_EDGE_MODE_ALIASED_INFLATED = 0x2,
    D2D1_PATCH_EDGE_MODE_FORCE_DWORD = 0xffffffff
} D2D1_PATCH_EDGE_MODE;
typedef enum D2D1_ORIENTATION {
    D2D1_ORIENTATION_DEFAULT = 0x1,
    D2D1_ORIENTATION_FLIP_HORIZONTAL = 0x2,
    D2D1_ORIENTATION_ROTATE_CLOCKWISE180 = 0x3,
    D2D1_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL = 0x4,
    D2D1_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL = 0x5,
    D2D1_ORIENTATION_ROTATE_CLOCKWISE270 = 0x6,
    D2D1_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL = 0x7,
    D2D1_ORIENTATION_ROTATE_CLOCKWISE90 = 0x8,
    D2D1_ORIENTATION_FORCE_DWORD = 0xffffffff
} D2D1_ORIENTATION;
typedef enum D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS {
    D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS_NONE = 0x0,
    D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS_DISABLE_DPI_SCALE = 0x1,
    D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS;
typedef enum D2D1_IMAGE_SOURCE_LOADING_OPTIONS {
    D2D1_IMAGE_SOURCE_LOADING_OPTIONS_NONE = 0x0,
    D2D1_IMAGE_SOURCE_LOADING_OPTIONS_RELEASE_SOURCE = 0x1,
    D2D1_IMAGE_SOURCE_LOADING_OPTIONS_CACHE_ON_DEMAND = 0x2,
    D2D1_IMAGE_SOURCE_LOADING_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_IMAGE_SOURCE_LOADING_OPTIONS;
typedef enum D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS {
    D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS_NONE = 0x0,
    D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS_LOW_QUALITY_PRIMARY_CONVERSION = 0x1,
    D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS;
typedef enum D2D1_SPRITE_OPTIONS {
    D2D1_SPRITE_OPTIONS_NONE = 0x0,
    D2D1_SPRITE_OPTIONS_CLAMP_TO_SOURCE_RECTANGLE = 0x1,
    D2D1_SPRITE_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_SPRITE_OPTIONS;
typedef enum D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION {
    D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_DEFAULT = 0x0,
    D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_DISABLE = 0x1,
    D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_FORCE_DWORD = 0xffffffff
} D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION;
typedef enum D2D1_GAMMA1 {
    D2D1_GAMMA1_G22 = D2D1_GAMMA_2_2,
    D2D1_GAMMA1_G10 = D2D1_GAMMA_1_0,
    D2D1_GAMMA1_G2084 = 2,
    D2D1_GAMMA1_FORCE_DWORD = 0xffffffff
} D2D1_GAMMA1;
typedef enum D2D1_COLOR_CONTEXT_TYPE {
    D2D1_COLOR_CONTEXT_TYPE_ICC = 0x0,
    D2D1_COLOR_CONTEXT_TYPE_SIMPLE = 0x1,
    D2D1_COLOR_CONTEXT_TYPE_DXGI = 0x2,
    D2D1_COLOR_CONTEXT_TYPE_FORCE_DWORD = 0xffffffff
} D2D1_COLOR_CONTEXT_TYPE;
typedef struct D2D1_INK_POINT {
    float x;
    float y;
    float radius;
} D2D1_INK_POINT;
typedef struct D2D1_INK_BEZIER_SEGMENT {
    D2D1_INK_POINT point1;
    D2D1_INK_POINT point2;
    D2D1_INK_POINT point3;
} D2D1_INK_BEZIER_SEGMENT;
typedef struct D2D1_INK_STYLE_PROPERTIES {
    D2D1_INK_NIB_SHAPE nibShape;
    D2D1_MATRIX_3X2_F nibTransform;
} D2D1_INK_STYLE_PROPERTIES;
typedef struct D2D1_GRADIENT_MESH_PATCH {
    D2D1_POINT_2F point00;
    D2D1_POINT_2F point01;
    D2D1_POINT_2F point02;
    D2D1_POINT_2F point03;
    D2D1_POINT_2F point10;
    D2D1_POINT_2F point11;
    D2D1_POINT_2F point12;
    D2D1_POINT_2F point13;
    D2D1_POINT_2F point20;
    D2D1_POINT_2F point21;
    D2D1_POINT_2F point22;
    D2D1_POINT_2F point23;
    D2D1_POINT_2F point30;
    D2D1_POINT_2F point31;
    D2D1_POINT_2F point32;
    D2D1_POINT_2F point33;
    D2D1_COLOR_F color00;
    D2D1_COLOR_F color03;
    D2D1_COLOR_F color30;
    D2D1_COLOR_F color33;
    D2D1_PATCH_EDGE_MODE topEdgeMode;
    D2D1_PATCH_EDGE_MODE leftEdgeMode;
    D2D1_PATCH_EDGE_MODE bottomEdgeMode;
    D2D1_PATCH_EDGE_MODE rightEdgeMode;
} D2D1_GRADIENT_MESH_PATCH;
typedef struct D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES {
    D2D1_ORIENTATION orientation;
    float scaleX;
    float scaleY;
    D2D1_INTERPOLATION_MODE interpolationMode;
    D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS options;
} D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES;
typedef struct D2D1_SIMPLE_COLOR_PROFILE {
    D2D1_POINT_2F redPrimary;
    D2D1_POINT_2F greenPrimary;
    D2D1_POINT_2F bluePrimary;
    D2D1_POINT_2F whitePointXZ;
    D2D1_GAMMA1 gamma;
} D2D1_SIMPLE_COLOR_PROFILE;
/*****************************************************************************
 * ID2D1InkStyle interface
 */
#ifndef __ID2D1InkStyle_INTERFACE_DEFINED__
#define __ID2D1InkStyle_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1InkStyle, 0xbae8b344, 0x23fc, 0x4071, 0x8c,0xb5, 0xd0,0x5d,0x6f,0x07,0x38,0x48);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bae8b344-23fc-4071-8cb5-d05d6f073848")
ID2D1InkStyle : public ID2D1Resource
{
    virtual void STDMETHODCALLTYPE SetNibTransform(
        const D2D1_MATRIX_3X2_F *transform) = 0;

    virtual void STDMETHODCALLTYPE GetNibTransform(
        D2D1_MATRIX_3X2_F *transform) = 0;

    virtual void STDMETHODCALLTYPE SetNibShape(
        D2D1_INK_NIB_SHAPE shape) = 0;

    virtual D2D1_INK_NIB_SHAPE STDMETHODCALLTYPE GetNibShape(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1InkStyle, 0xbae8b344, 0x23fc, 0x4071, 0x8c,0xb5, 0xd0,0x5d,0x6f,0x07,0x38,0x48)
#endif
#else
typedef struct ID2D1InkStyleVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1InkStyle *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1InkStyle *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1InkStyle *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1InkStyle *This,
        ID2D1Factory **factory);

    /*** ID2D1InkStyle methods ***/
    void (STDMETHODCALLTYPE *SetNibTransform)(
        ID2D1InkStyle *This,
        const D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *GetNibTransform)(
        ID2D1InkStyle *This,
        D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *SetNibShape)(
        ID2D1InkStyle *This,
        D2D1_INK_NIB_SHAPE shape);

    D2D1_INK_NIB_SHAPE (STDMETHODCALLTYPE *GetNibShape)(
        ID2D1InkStyle *This);

    END_INTERFACE
} ID2D1InkStyleVtbl;

interface ID2D1InkStyle {
    CONST_VTBL ID2D1InkStyleVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1InkStyle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1InkStyle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1InkStyle_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1InkStyle_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1InkStyle methods ***/
#define ID2D1InkStyle_SetNibTransform(This,transform) (This)->lpVtbl->SetNibTransform(This,transform)
#define ID2D1InkStyle_GetNibTransform(This,transform) (This)->lpVtbl->GetNibTransform(This,transform)
#define ID2D1InkStyle_SetNibShape(This,shape) (This)->lpVtbl->SetNibShape(This,shape)
#define ID2D1InkStyle_GetNibShape(This) (This)->lpVtbl->GetNibShape(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1InkStyle_QueryInterface(ID2D1InkStyle* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1InkStyle_AddRef(ID2D1InkStyle* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1InkStyle_Release(ID2D1InkStyle* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1InkStyle_GetFactory(ID2D1InkStyle* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1InkStyle methods ***/
static inline void ID2D1InkStyle_SetNibTransform(ID2D1InkStyle* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetNibTransform(This,transform);
}
static inline void ID2D1InkStyle_GetNibTransform(ID2D1InkStyle* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetNibTransform(This,transform);
}
static inline void ID2D1InkStyle_SetNibShape(ID2D1InkStyle* This,D2D1_INK_NIB_SHAPE shape) {
    This->lpVtbl->SetNibShape(This,shape);
}
static inline D2D1_INK_NIB_SHAPE ID2D1InkStyle_GetNibShape(ID2D1InkStyle* This) {
    return This->lpVtbl->GetNibShape(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1InkStyle_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Ink interface
 */
#ifndef __ID2D1Ink_INTERFACE_DEFINED__
#define __ID2D1Ink_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Ink, 0xb499923b, 0x7029, 0x478f, 0xa8,0xb3, 0x43,0x2c,0x7c,0x5f,0x53,0x12);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b499923b-7029-478f-a8b3-432c7c5f5312")
ID2D1Ink : public ID2D1Resource
{
    virtual void STDMETHODCALLTYPE SetStartPoint(
        const D2D1_INK_POINT *start_point) = 0;

#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_INK_POINT* STDMETHODCALLTYPE GetStartPoint(
        D2D1_INK_POINT *__ret) = 0;
    D2D1_INK_POINT STDMETHODCALLTYPE GetStartPoint(
        )
    {
        D2D1_INK_POINT __ret;
        return *GetStartPoint(&__ret);
    }
#else
    virtual D2D1_INK_POINT STDMETHODCALLTYPE GetStartPoint(
        ) = 0;
#endif

    virtual HRESULT STDMETHODCALLTYPE AddSegments(
        const D2D1_INK_BEZIER_SEGMENT *segments,
        UINT32 segment_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveSegmentsAtEnd(
        UINT32 segment_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSegments(
        UINT32 start_segment,
        const D2D1_INK_BEZIER_SEGMENT *segments,
        UINT32 segment_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSegmentAtEnd(
        const D2D1_INK_BEZIER_SEGMENT *segment) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetSegmentCount(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSegments(
        UINT32 start_segment,
        D2D1_INK_BEZIER_SEGMENT *segments,
        UINT32 segment_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE StreamAsGeometry(
        ID2D1InkStyle *ink_style,
        const D2D1_MATRIX_3X2_F *world_transform,
        float flattening_tolerance,
        ID2D1SimplifiedGeometrySink *geometry_sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBounds(
        ID2D1InkStyle *ink_style,
        const D2D1_MATRIX_3X2_F *world_transform,
        D2D1_RECT_F *bounds) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Ink, 0xb499923b, 0x7029, 0x478f, 0xa8,0xb3, 0x43,0x2c,0x7c,0x5f,0x53,0x12)
#endif
#else
typedef struct ID2D1InkVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Ink *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Ink *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Ink *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1Ink *This,
        ID2D1Factory **factory);

    /*** ID2D1Ink methods ***/
    void (STDMETHODCALLTYPE *SetStartPoint)(
        ID2D1Ink *This,
        const D2D1_INK_POINT *start_point);

    D2D1_INK_POINT * (STDMETHODCALLTYPE *GetStartPoint)(
        ID2D1Ink *This,
        D2D1_INK_POINT *__ret);

    HRESULT (STDMETHODCALLTYPE *AddSegments)(
        ID2D1Ink *This,
        const D2D1_INK_BEZIER_SEGMENT *segments,
        UINT32 segment_count);

    HRESULT (STDMETHODCALLTYPE *RemoveSegmentsAtEnd)(
        ID2D1Ink *This,
        UINT32 segment_count);

    HRESULT (STDMETHODCALLTYPE *SetSegments)(
        ID2D1Ink *This,
        UINT32 start_segment,
        const D2D1_INK_BEZIER_SEGMENT *segments,
        UINT32 segment_count);

    HRESULT (STDMETHODCALLTYPE *SetSegmentAtEnd)(
        ID2D1Ink *This,
        const D2D1_INK_BEZIER_SEGMENT *segment);

    UINT32 (STDMETHODCALLTYPE *GetSegmentCount)(
        ID2D1Ink *This);

    HRESULT (STDMETHODCALLTYPE *GetSegments)(
        ID2D1Ink *This,
        UINT32 start_segment,
        D2D1_INK_BEZIER_SEGMENT *segments,
        UINT32 segment_count);

    HRESULT (STDMETHODCALLTYPE *StreamAsGeometry)(
        ID2D1Ink *This,
        ID2D1InkStyle *ink_style,
        const D2D1_MATRIX_3X2_F *world_transform,
        float flattening_tolerance,
        ID2D1SimplifiedGeometrySink *geometry_sink);

    HRESULT (STDMETHODCALLTYPE *GetBounds)(
        ID2D1Ink *This,
        ID2D1InkStyle *ink_style,
        const D2D1_MATRIX_3X2_F *world_transform,
        D2D1_RECT_F *bounds);

    END_INTERFACE
} ID2D1InkVtbl;

interface ID2D1Ink {
    CONST_VTBL ID2D1InkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Ink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Ink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Ink_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Ink_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Ink methods ***/
#define ID2D1Ink_SetStartPoint(This,start_point) (This)->lpVtbl->SetStartPoint(This,start_point)
#define ID2D1Ink_GetStartPoint(This) ID2D1Ink_GetStartPoint_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1Ink_AddSegments(This,segments,segment_count) (This)->lpVtbl->AddSegments(This,segments,segment_count)
#define ID2D1Ink_RemoveSegmentsAtEnd(This,segment_count) (This)->lpVtbl->RemoveSegmentsAtEnd(This,segment_count)
#define ID2D1Ink_SetSegments(This,start_segment,segments,segment_count) (This)->lpVtbl->SetSegments(This,start_segment,segments,segment_count)
#define ID2D1Ink_SetSegmentAtEnd(This,segment) (This)->lpVtbl->SetSegmentAtEnd(This,segment)
#define ID2D1Ink_GetSegmentCount(This) (This)->lpVtbl->GetSegmentCount(This)
#define ID2D1Ink_GetSegments(This,start_segment,segments,segment_count) (This)->lpVtbl->GetSegments(This,start_segment,segments,segment_count)
#define ID2D1Ink_StreamAsGeometry(This,ink_style,world_transform,flattening_tolerance,geometry_sink) (This)->lpVtbl->StreamAsGeometry(This,ink_style,world_transform,flattening_tolerance,geometry_sink)
#define ID2D1Ink_GetBounds(This,ink_style,world_transform,bounds) (This)->lpVtbl->GetBounds(This,ink_style,world_transform,bounds)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Ink_QueryInterface(ID2D1Ink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Ink_AddRef(ID2D1Ink* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Ink_Release(ID2D1Ink* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1Ink_GetFactory(ID2D1Ink* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Ink methods ***/
static inline void ID2D1Ink_SetStartPoint(ID2D1Ink* This,const D2D1_INK_POINT *start_point) {
    This->lpVtbl->SetStartPoint(This,start_point);
}
static inline D2D1_INK_POINT ID2D1Ink_GetStartPoint(ID2D1Ink* This) {
    D2D1_INK_POINT __ret;
    return *This->lpVtbl->GetStartPoint(This,&__ret);
}
static inline HRESULT ID2D1Ink_AddSegments(ID2D1Ink* This,const D2D1_INK_BEZIER_SEGMENT *segments,UINT32 segment_count) {
    return This->lpVtbl->AddSegments(This,segments,segment_count);
}
static inline HRESULT ID2D1Ink_RemoveSegmentsAtEnd(ID2D1Ink* This,UINT32 segment_count) {
    return This->lpVtbl->RemoveSegmentsAtEnd(This,segment_count);
}
static inline HRESULT ID2D1Ink_SetSegments(ID2D1Ink* This,UINT32 start_segment,const D2D1_INK_BEZIER_SEGMENT *segments,UINT32 segment_count) {
    return This->lpVtbl->SetSegments(This,start_segment,segments,segment_count);
}
static inline HRESULT ID2D1Ink_SetSegmentAtEnd(ID2D1Ink* This,const D2D1_INK_BEZIER_SEGMENT *segment) {
    return This->lpVtbl->SetSegmentAtEnd(This,segment);
}
static inline UINT32 ID2D1Ink_GetSegmentCount(ID2D1Ink* This) {
    return This->lpVtbl->GetSegmentCount(This);
}
static inline HRESULT ID2D1Ink_GetSegments(ID2D1Ink* This,UINT32 start_segment,D2D1_INK_BEZIER_SEGMENT *segments,UINT32 segment_count) {
    return This->lpVtbl->GetSegments(This,start_segment,segments,segment_count);
}
static inline HRESULT ID2D1Ink_StreamAsGeometry(ID2D1Ink* This,ID2D1InkStyle *ink_style,const D2D1_MATRIX_3X2_F *world_transform,float flattening_tolerance,ID2D1SimplifiedGeometrySink *geometry_sink) {
    return This->lpVtbl->StreamAsGeometry(This,ink_style,world_transform,flattening_tolerance,geometry_sink);
}
static inline HRESULT ID2D1Ink_GetBounds(ID2D1Ink* This,ID2D1InkStyle *ink_style,const D2D1_MATRIX_3X2_F *world_transform,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetBounds(This,ink_style,world_transform,bounds);
}
#endif
#endif

#endif


#endif  /* __ID2D1Ink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1GradientMesh interface
 */
#ifndef __ID2D1GradientMesh_INTERFACE_DEFINED__
#define __ID2D1GradientMesh_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1GradientMesh, 0xf292e401, 0xc050, 0x4cde, 0x83,0xd7, 0x04,0x96,0x2d,0x3b,0x23,0xc2);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f292e401-c050-4cde-83d7-04962d3b23c2")
ID2D1GradientMesh : public ID2D1Resource
{
    virtual UINT32 STDMETHODCALLTYPE GetPatchCount(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPatches(
        UINT32 start_index,
        D2D1_GRADIENT_MESH_PATCH *patches,
        UINT32 patch_count) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1GradientMesh, 0xf292e401, 0xc050, 0x4cde, 0x83,0xd7, 0x04,0x96,0x2d,0x3b,0x23,0xc2)
#endif
#else
typedef struct ID2D1GradientMeshVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1GradientMesh *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1GradientMesh *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1GradientMesh *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1GradientMesh *This,
        ID2D1Factory **factory);

    /*** ID2D1GradientMesh methods ***/
    UINT32 (STDMETHODCALLTYPE *GetPatchCount)(
        ID2D1GradientMesh *This);

    HRESULT (STDMETHODCALLTYPE *GetPatches)(
        ID2D1GradientMesh *This,
        UINT32 start_index,
        D2D1_GRADIENT_MESH_PATCH *patches,
        UINT32 patch_count);

    END_INTERFACE
} ID2D1GradientMeshVtbl;

interface ID2D1GradientMesh {
    CONST_VTBL ID2D1GradientMeshVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1GradientMesh_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1GradientMesh_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1GradientMesh_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1GradientMesh_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1GradientMesh methods ***/
#define ID2D1GradientMesh_GetPatchCount(This) (This)->lpVtbl->GetPatchCount(This)
#define ID2D1GradientMesh_GetPatches(This,start_index,patches,patch_count) (This)->lpVtbl->GetPatches(This,start_index,patches,patch_count)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1GradientMesh_QueryInterface(ID2D1GradientMesh* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1GradientMesh_AddRef(ID2D1GradientMesh* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1GradientMesh_Release(ID2D1GradientMesh* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1GradientMesh_GetFactory(ID2D1GradientMesh* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1GradientMesh methods ***/
static inline UINT32 ID2D1GradientMesh_GetPatchCount(ID2D1GradientMesh* This) {
    return This->lpVtbl->GetPatchCount(This);
}
static inline HRESULT ID2D1GradientMesh_GetPatches(ID2D1GradientMesh* This,UINT32 start_index,D2D1_GRADIENT_MESH_PATCH *patches,UINT32 patch_count) {
    return This->lpVtbl->GetPatches(This,start_index,patches,patch_count);
}
#endif
#endif

#endif


#endif  /* __ID2D1GradientMesh_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1ImageSource interface
 */
#ifndef __ID2D1ImageSource_INTERFACE_DEFINED__
#define __ID2D1ImageSource_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1ImageSource, 0xc9b664e5, 0x74a1, 0x4378, 0x9a,0xc2, 0xee,0xfc,0x37,0xa3,0xf4,0xd8);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c9b664e5-74a1-4378-9ac2-eefc37a3f4d8")
ID2D1ImageSource : public ID2D1Image
{
    virtual HRESULT STDMETHODCALLTYPE OfferResources(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE TryReclaimResources(
        BOOL *resources_discarded) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1ImageSource, 0xc9b664e5, 0x74a1, 0x4378, 0x9a,0xc2, 0xee,0xfc,0x37,0xa3,0xf4,0xd8)
#endif
#else
typedef struct ID2D1ImageSourceVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1ImageSource *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1ImageSource *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1ImageSource *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1ImageSource *This,
        ID2D1Factory **factory);

    /*** ID2D1ImageSource methods ***/
    HRESULT (STDMETHODCALLTYPE *OfferResources)(
        ID2D1ImageSource *This);

    HRESULT (STDMETHODCALLTYPE *TryReclaimResources)(
        ID2D1ImageSource *This,
        BOOL *resources_discarded);

    END_INTERFACE
} ID2D1ImageSourceVtbl;

interface ID2D1ImageSource {
    CONST_VTBL ID2D1ImageSourceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1ImageSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1ImageSource_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1ImageSource_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1ImageSource_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1ImageSource methods ***/
#define ID2D1ImageSource_OfferResources(This) (This)->lpVtbl->OfferResources(This)
#define ID2D1ImageSource_TryReclaimResources(This,resources_discarded) (This)->lpVtbl->TryReclaimResources(This,resources_discarded)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1ImageSource_QueryInterface(ID2D1ImageSource* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1ImageSource_AddRef(ID2D1ImageSource* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1ImageSource_Release(ID2D1ImageSource* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1ImageSource_GetFactory(ID2D1ImageSource* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1ImageSource methods ***/
static inline HRESULT ID2D1ImageSource_OfferResources(ID2D1ImageSource* This) {
    return This->lpVtbl->OfferResources(This);
}
static inline HRESULT ID2D1ImageSource_TryReclaimResources(ID2D1ImageSource* This,BOOL *resources_discarded) {
    return This->lpVtbl->TryReclaimResources(This,resources_discarded);
}
#endif
#endif

#endif


#endif  /* __ID2D1ImageSource_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1ImageSourceFromWic interface
 */
#ifndef __ID2D1ImageSourceFromWic_INTERFACE_DEFINED__
#define __ID2D1ImageSourceFromWic_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1ImageSourceFromWic, 0x77395441, 0x1c8f, 0x4555, 0x86,0x83, 0xf5,0x0d,0xab,0x0f,0xe7,0x92);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("77395441-1c8f-4555-8683-f50dab0fe792")
ID2D1ImageSourceFromWic : public ID2D1ImageSource
{
    virtual HRESULT STDMETHODCALLTYPE EnsureCached(
        const D2D1_RECT_U *rect_to_fill) = 0;

    virtual HRESULT STDMETHODCALLTYPE TrimCache(
        const D2D1_RECT_U *rect_to_preserve) = 0;

    virtual void STDMETHODCALLTYPE GetSource(
        IWICBitmapSource **source) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1ImageSourceFromWic, 0x77395441, 0x1c8f, 0x4555, 0x86,0x83, 0xf5,0x0d,0xab,0x0f,0xe7,0x92)
#endif
#else
typedef struct ID2D1ImageSourceFromWicVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1ImageSourceFromWic *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1ImageSourceFromWic *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1ImageSourceFromWic *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1ImageSourceFromWic *This,
        ID2D1Factory **factory);

    /*** ID2D1ImageSource methods ***/
    HRESULT (STDMETHODCALLTYPE *OfferResources)(
        ID2D1ImageSourceFromWic *This);

    HRESULT (STDMETHODCALLTYPE *TryReclaimResources)(
        ID2D1ImageSourceFromWic *This,
        BOOL *resources_discarded);

    /*** ID2D1ImageSourceFromWic methods ***/
    HRESULT (STDMETHODCALLTYPE *EnsureCached)(
        ID2D1ImageSourceFromWic *This,
        const D2D1_RECT_U *rect_to_fill);

    HRESULT (STDMETHODCALLTYPE *TrimCache)(
        ID2D1ImageSourceFromWic *This,
        const D2D1_RECT_U *rect_to_preserve);

    void (STDMETHODCALLTYPE *GetSource)(
        ID2D1ImageSourceFromWic *This,
        IWICBitmapSource **source);

    END_INTERFACE
} ID2D1ImageSourceFromWicVtbl;

interface ID2D1ImageSourceFromWic {
    CONST_VTBL ID2D1ImageSourceFromWicVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1ImageSourceFromWic_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1ImageSourceFromWic_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1ImageSourceFromWic_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1ImageSourceFromWic_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1ImageSource methods ***/
#define ID2D1ImageSourceFromWic_OfferResources(This) (This)->lpVtbl->OfferResources(This)
#define ID2D1ImageSourceFromWic_TryReclaimResources(This,resources_discarded) (This)->lpVtbl->TryReclaimResources(This,resources_discarded)
/*** ID2D1ImageSourceFromWic methods ***/
#define ID2D1ImageSourceFromWic_EnsureCached(This,rect_to_fill) (This)->lpVtbl->EnsureCached(This,rect_to_fill)
#define ID2D1ImageSourceFromWic_TrimCache(This,rect_to_preserve) (This)->lpVtbl->TrimCache(This,rect_to_preserve)
#define ID2D1ImageSourceFromWic_GetSource(This,source) (This)->lpVtbl->GetSource(This,source)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1ImageSourceFromWic_QueryInterface(ID2D1ImageSourceFromWic* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1ImageSourceFromWic_AddRef(ID2D1ImageSourceFromWic* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1ImageSourceFromWic_Release(ID2D1ImageSourceFromWic* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1ImageSourceFromWic_GetFactory(ID2D1ImageSourceFromWic* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1ImageSource methods ***/
static inline HRESULT ID2D1ImageSourceFromWic_OfferResources(ID2D1ImageSourceFromWic* This) {
    return This->lpVtbl->OfferResources(This);
}
static inline HRESULT ID2D1ImageSourceFromWic_TryReclaimResources(ID2D1ImageSourceFromWic* This,BOOL *resources_discarded) {
    return This->lpVtbl->TryReclaimResources(This,resources_discarded);
}
/*** ID2D1ImageSourceFromWic methods ***/
static inline HRESULT ID2D1ImageSourceFromWic_EnsureCached(ID2D1ImageSourceFromWic* This,const D2D1_RECT_U *rect_to_fill) {
    return This->lpVtbl->EnsureCached(This,rect_to_fill);
}
static inline HRESULT ID2D1ImageSourceFromWic_TrimCache(ID2D1ImageSourceFromWic* This,const D2D1_RECT_U *rect_to_preserve) {
    return This->lpVtbl->TrimCache(This,rect_to_preserve);
}
static inline void ID2D1ImageSourceFromWic_GetSource(ID2D1ImageSourceFromWic* This,IWICBitmapSource **source) {
    This->lpVtbl->GetSource(This,source);
}
#endif
#endif

#endif


#endif  /* __ID2D1ImageSourceFromWic_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1TransformedImageSource interface
 */
#ifndef __ID2D1TransformedImageSource_INTERFACE_DEFINED__
#define __ID2D1TransformedImageSource_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1TransformedImageSource, 0x7f1f79e5, 0x2796, 0x416c, 0x8f,0x55, 0x70,0x0f,0x91,0x14,0x45,0xe5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7f1f79e5-2796-416c-8f55-700f911445e5")
ID2D1TransformedImageSource : public ID2D1Image
{
    virtual void STDMETHODCALLTYPE GetSource(
        ID2D1ImageSource **source) = 0;

    virtual void STDMETHODCALLTYPE GetProperties(
        D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *out) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1TransformedImageSource, 0x7f1f79e5, 0x2796, 0x416c, 0x8f,0x55, 0x70,0x0f,0x91,0x14,0x45,0xe5)
#endif
#else
typedef struct ID2D1TransformedImageSourceVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1TransformedImageSource *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1TransformedImageSource *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1TransformedImageSource *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1TransformedImageSource *This,
        ID2D1Factory **factory);

    /*** ID2D1TransformedImageSource methods ***/
    void (STDMETHODCALLTYPE *GetSource)(
        ID2D1TransformedImageSource *This,
        ID2D1ImageSource **source);

    void (STDMETHODCALLTYPE *GetProperties)(
        ID2D1TransformedImageSource *This,
        D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *out);

    END_INTERFACE
} ID2D1TransformedImageSourceVtbl;

interface ID2D1TransformedImageSource {
    CONST_VTBL ID2D1TransformedImageSourceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1TransformedImageSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1TransformedImageSource_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1TransformedImageSource_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1TransformedImageSource_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1TransformedImageSource methods ***/
#define ID2D1TransformedImageSource_GetSource(This,source) (This)->lpVtbl->GetSource(This,source)
#define ID2D1TransformedImageSource_GetProperties(This,out) (This)->lpVtbl->GetProperties(This,out)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1TransformedImageSource_QueryInterface(ID2D1TransformedImageSource* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1TransformedImageSource_AddRef(ID2D1TransformedImageSource* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1TransformedImageSource_Release(ID2D1TransformedImageSource* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1TransformedImageSource_GetFactory(ID2D1TransformedImageSource* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1TransformedImageSource methods ***/
static inline void ID2D1TransformedImageSource_GetSource(ID2D1TransformedImageSource* This,ID2D1ImageSource **source) {
    This->lpVtbl->GetSource(This,source);
}
static inline void ID2D1TransformedImageSource_GetProperties(ID2D1TransformedImageSource* This,D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *out) {
    This->lpVtbl->GetProperties(This,out);
}
#endif
#endif

#endif


#endif  /* __ID2D1TransformedImageSource_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1LookupTable3D interface
 */
#ifndef __ID2D1LookupTable3D_INTERFACE_DEFINED__
#define __ID2D1LookupTable3D_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1LookupTable3D, 0x53dd9855, 0xa3b0, 0x4d5b, 0x82,0xe1, 0x26,0xe2,0x5c,0x5e,0x57,0x97);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("53dd9855-a3b0-4d5b-82e1-26e25c5e5797")
ID2D1LookupTable3D : public ID2D1Resource
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1LookupTable3D, 0x53dd9855, 0xa3b0, 0x4d5b, 0x82,0xe1, 0x26,0xe2,0x5c,0x5e,0x57,0x97)
#endif
#else
typedef struct ID2D1LookupTable3DVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1LookupTable3D *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1LookupTable3D *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1LookupTable3D *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1LookupTable3D *This,
        ID2D1Factory **factory);

    END_INTERFACE
} ID2D1LookupTable3DVtbl;

interface ID2D1LookupTable3D {
    CONST_VTBL ID2D1LookupTable3DVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1LookupTable3D_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1LookupTable3D_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1LookupTable3D_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1LookupTable3D_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1LookupTable3D_QueryInterface(ID2D1LookupTable3D* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1LookupTable3D_AddRef(ID2D1LookupTable3D* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1LookupTable3D_Release(ID2D1LookupTable3D* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1LookupTable3D_GetFactory(ID2D1LookupTable3D* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
#endif
#endif

#endif


#endif  /* __ID2D1LookupTable3D_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1SpriteBatch interface
 */
#ifndef __ID2D1SpriteBatch_INTERFACE_DEFINED__
#define __ID2D1SpriteBatch_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1SpriteBatch, 0x4dc583bf, 0x3a10, 0x438a, 0x87,0x22, 0xe9,0x76,0x52,0x24,0xf1,0xf1);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("4dc583bf-3a10-438a-8722-e9765224f1f1")
ID2D1SpriteBatch : public ID2D1Resource
{
    virtual HRESULT STDMETHODCALLTYPE AddSprites(
        UINT32 sprite_count,
        const D2D1_RECT_F *destination_rectangles,
        const D2D1_RECT_U *source_rectangles,
        const D2D1_COLOR_F *colors,
        const D2D1_MATRIX_3X2_F *transforms,
        UINT32 destination_rectangles_stride,
        UINT32 source_rectangles_stride,
        UINT32 colors_stride,
        UINT32 transforms_stride) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSprites(
        UINT32 start_index,
        UINT32 sprite_count,
        const D2D1_RECT_F *destination_rectangles,
        const D2D1_RECT_U *source_rectangles,
        const D2D1_COLOR_F *colors,
        const D2D1_MATRIX_3X2_F *transforms,
        UINT32 destination_rectangles_stride,
        UINT32 source_rectangles_stride,
        UINT32 colors_stride,
        UINT32 transforms_stride) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSprites(
        UINT32 start_index,
        UINT32 sprite_count,
        D2D1_RECT_F *destination_rectangles,
        D2D1_RECT_U *source_rectangles,
        D2D1_COLOR_F *colors,
        D2D1_MATRIX_3X2_F *transforms) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetSpriteCount(
        ) = 0;

    virtual void STDMETHODCALLTYPE Clear(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1SpriteBatch, 0x4dc583bf, 0x3a10, 0x438a, 0x87,0x22, 0xe9,0x76,0x52,0x24,0xf1,0xf1)
#endif
#else
typedef struct ID2D1SpriteBatchVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1SpriteBatch *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1SpriteBatch *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1SpriteBatch *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1SpriteBatch *This,
        ID2D1Factory **factory);

    /*** ID2D1SpriteBatch methods ***/
    HRESULT (STDMETHODCALLTYPE *AddSprites)(
        ID2D1SpriteBatch *This,
        UINT32 sprite_count,
        const D2D1_RECT_F *destination_rectangles,
        const D2D1_RECT_U *source_rectangles,
        const D2D1_COLOR_F *colors,
        const D2D1_MATRIX_3X2_F *transforms,
        UINT32 destination_rectangles_stride,
        UINT32 source_rectangles_stride,
        UINT32 colors_stride,
        UINT32 transforms_stride);

    HRESULT (STDMETHODCALLTYPE *SetSprites)(
        ID2D1SpriteBatch *This,
        UINT32 start_index,
        UINT32 sprite_count,
        const D2D1_RECT_F *destination_rectangles,
        const D2D1_RECT_U *source_rectangles,
        const D2D1_COLOR_F *colors,
        const D2D1_MATRIX_3X2_F *transforms,
        UINT32 destination_rectangles_stride,
        UINT32 source_rectangles_stride,
        UINT32 colors_stride,
        UINT32 transforms_stride);

    HRESULT (STDMETHODCALLTYPE *GetSprites)(
        ID2D1SpriteBatch *This,
        UINT32 start_index,
        UINT32 sprite_count,
        D2D1_RECT_F *destination_rectangles,
        D2D1_RECT_U *source_rectangles,
        D2D1_COLOR_F *colors,
        D2D1_MATRIX_3X2_F *transforms);

    UINT32 (STDMETHODCALLTYPE *GetSpriteCount)(
        ID2D1SpriteBatch *This);

    void (STDMETHODCALLTYPE *Clear)(
        ID2D1SpriteBatch *This);

    END_INTERFACE
} ID2D1SpriteBatchVtbl;

interface ID2D1SpriteBatch {
    CONST_VTBL ID2D1SpriteBatchVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1SpriteBatch_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1SpriteBatch_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1SpriteBatch_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1SpriteBatch_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1SpriteBatch methods ***/
#define ID2D1SpriteBatch_AddSprites(This,sprite_count,destination_rectangles,source_rectangles,colors,transforms,destination_rectangles_stride,source_rectangles_stride,colors_stride,transforms_stride) (This)->lpVtbl->AddSprites(This,sprite_count,destination_rectangles,source_rectangles,colors,transforms,destination_rectangles_stride,source_rectangles_stride,colors_stride,transforms_stride)
#define ID2D1SpriteBatch_SetSprites(This,start_index,sprite_count,destination_rectangles,source_rectangles,colors,transforms,destination_rectangles_stride,source_rectangles_stride,colors_stride,transforms_stride) (This)->lpVtbl->SetSprites(This,start_index,sprite_count,destination_rectangles,source_rectangles,colors,transforms,destination_rectangles_stride,source_rectangles_stride,colors_stride,transforms_stride)
#define ID2D1SpriteBatch_GetSprites(This,start_index,sprite_count,destination_rectangles,source_rectangles,colors,transforms) (This)->lpVtbl->GetSprites(This,start_index,sprite_count,destination_rectangles,source_rectangles,colors,transforms)
#define ID2D1SpriteBatch_GetSpriteCount(This) (This)->lpVtbl->GetSpriteCount(This)
#define ID2D1SpriteBatch_Clear(This) (This)->lpVtbl->Clear(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1SpriteBatch_QueryInterface(ID2D1SpriteBatch* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1SpriteBatch_AddRef(ID2D1SpriteBatch* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1SpriteBatch_Release(ID2D1SpriteBatch* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1SpriteBatch_GetFactory(ID2D1SpriteBatch* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1SpriteBatch methods ***/
static inline HRESULT ID2D1SpriteBatch_AddSprites(ID2D1SpriteBatch* This,UINT32 sprite_count,const D2D1_RECT_F *destination_rectangles,const D2D1_RECT_U *source_rectangles,const D2D1_COLOR_F *colors,const D2D1_MATRIX_3X2_F *transforms,UINT32 destination_rectangles_stride,UINT32 source_rectangles_stride,UINT32 colors_stride,UINT32 transforms_stride) {
    return This->lpVtbl->AddSprites(This,sprite_count,destination_rectangles,source_rectangles,colors,transforms,destination_rectangles_stride,source_rectangles_stride,colors_stride,transforms_stride);
}
static inline HRESULT ID2D1SpriteBatch_SetSprites(ID2D1SpriteBatch* This,UINT32 start_index,UINT32 sprite_count,const D2D1_RECT_F *destination_rectangles,const D2D1_RECT_U *source_rectangles,const D2D1_COLOR_F *colors,const D2D1_MATRIX_3X2_F *transforms,UINT32 destination_rectangles_stride,UINT32 source_rectangles_stride,UINT32 colors_stride,UINT32 transforms_stride) {
    return This->lpVtbl->SetSprites(This,start_index,sprite_count,destination_rectangles,source_rectangles,colors,transforms,destination_rectangles_stride,source_rectangles_stride,colors_stride,transforms_stride);
}
static inline HRESULT ID2D1SpriteBatch_GetSprites(ID2D1SpriteBatch* This,UINT32 start_index,UINT32 sprite_count,D2D1_RECT_F *destination_rectangles,D2D1_RECT_U *source_rectangles,D2D1_COLOR_F *colors,D2D1_MATRIX_3X2_F *transforms) {
    return This->lpVtbl->GetSprites(This,start_index,sprite_count,destination_rectangles,source_rectangles,colors,transforms);
}
static inline UINT32 ID2D1SpriteBatch_GetSpriteCount(ID2D1SpriteBatch* This) {
    return This->lpVtbl->GetSpriteCount(This);
}
static inline void ID2D1SpriteBatch_Clear(ID2D1SpriteBatch* This) {
    This->lpVtbl->Clear(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1SpriteBatch_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1SvgGlyphStyle interface
 */
#ifndef __ID2D1SvgGlyphStyle_INTERFACE_DEFINED__
#define __ID2D1SvgGlyphStyle_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1SvgGlyphStyle, 0xaf671749, 0xd241, 0x4db8, 0x8e,0x41, 0xdc,0xc2,0xe5,0xc1,0xa4,0x38);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("af671749-d241-4db8-8e41-dcc2e5c1a438")
ID2D1SvgGlyphStyle : public ID2D1Resource
{
    virtual HRESULT STDMETHODCALLTYPE SetFill(
        ID2D1Brush *brush) = 0;

    virtual void STDMETHODCALLTYPE GetFill(
        ID2D1Brush **brush) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStroke(
        ID2D1Brush *brush,
        FLOAT stroke_width,
        const FLOAT *dashes,
        UINT32 dashes_count,
        FLOAT dash_offset) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetStrokeDashesCount(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetStroke(
        ID2D1Brush **brush,
        FLOAT *stroke_width,
        FLOAT *dashes,
        UINT32 dashes_count,
        FLOAT *dash_offset) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1SvgGlyphStyle, 0xaf671749, 0xd241, 0x4db8, 0x8e,0x41, 0xdc,0xc2,0xe5,0xc1,0xa4,0x38)
#endif
#else
typedef struct ID2D1SvgGlyphStyleVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1SvgGlyphStyle *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1SvgGlyphStyle *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1SvgGlyphStyle *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1SvgGlyphStyle *This,
        ID2D1Factory **factory);

    /*** ID2D1SvgGlyphStyle methods ***/
    HRESULT (STDMETHODCALLTYPE *SetFill)(
        ID2D1SvgGlyphStyle *This,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *GetFill)(
        ID2D1SvgGlyphStyle *This,
        ID2D1Brush **brush);

    HRESULT (STDMETHODCALLTYPE *SetStroke)(
        ID2D1SvgGlyphStyle *This,
        ID2D1Brush *brush,
        FLOAT stroke_width,
        const FLOAT *dashes,
        UINT32 dashes_count,
        FLOAT dash_offset);

    UINT32 (STDMETHODCALLTYPE *GetStrokeDashesCount)(
        ID2D1SvgGlyphStyle *This);

    void (STDMETHODCALLTYPE *GetStroke)(
        ID2D1SvgGlyphStyle *This,
        ID2D1Brush **brush,
        FLOAT *stroke_width,
        FLOAT *dashes,
        UINT32 dashes_count,
        FLOAT *dash_offset);

    END_INTERFACE
} ID2D1SvgGlyphStyleVtbl;

interface ID2D1SvgGlyphStyle {
    CONST_VTBL ID2D1SvgGlyphStyleVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1SvgGlyphStyle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1SvgGlyphStyle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1SvgGlyphStyle_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1SvgGlyphStyle_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1SvgGlyphStyle methods ***/
#define ID2D1SvgGlyphStyle_SetFill(This,brush) (This)->lpVtbl->SetFill(This,brush)
#define ID2D1SvgGlyphStyle_GetFill(This,brush) (This)->lpVtbl->GetFill(This,brush)
#define ID2D1SvgGlyphStyle_SetStroke(This,brush,stroke_width,dashes,dashes_count,dash_offset) (This)->lpVtbl->SetStroke(This,brush,stroke_width,dashes,dashes_count,dash_offset)
#define ID2D1SvgGlyphStyle_GetStrokeDashesCount(This) (This)->lpVtbl->GetStrokeDashesCount(This)
#define ID2D1SvgGlyphStyle_GetStroke(This,brush,stroke_width,dashes,dashes_count,dash_offset) (This)->lpVtbl->GetStroke(This,brush,stroke_width,dashes,dashes_count,dash_offset)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1SvgGlyphStyle_QueryInterface(ID2D1SvgGlyphStyle* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1SvgGlyphStyle_AddRef(ID2D1SvgGlyphStyle* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1SvgGlyphStyle_Release(ID2D1SvgGlyphStyle* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1SvgGlyphStyle_GetFactory(ID2D1SvgGlyphStyle* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1SvgGlyphStyle methods ***/
static inline HRESULT ID2D1SvgGlyphStyle_SetFill(ID2D1SvgGlyphStyle* This,ID2D1Brush *brush) {
    return This->lpVtbl->SetFill(This,brush);
}
static inline void ID2D1SvgGlyphStyle_GetFill(ID2D1SvgGlyphStyle* This,ID2D1Brush **brush) {
    This->lpVtbl->GetFill(This,brush);
}
static inline HRESULT ID2D1SvgGlyphStyle_SetStroke(ID2D1SvgGlyphStyle* This,ID2D1Brush *brush,FLOAT stroke_width,const FLOAT *dashes,UINT32 dashes_count,FLOAT dash_offset) {
    return This->lpVtbl->SetStroke(This,brush,stroke_width,dashes,dashes_count,dash_offset);
}
static inline UINT32 ID2D1SvgGlyphStyle_GetStrokeDashesCount(ID2D1SvgGlyphStyle* This) {
    return This->lpVtbl->GetStrokeDashesCount(This);
}
static inline void ID2D1SvgGlyphStyle_GetStroke(ID2D1SvgGlyphStyle* This,ID2D1Brush **brush,FLOAT *stroke_width,FLOAT *dashes,UINT32 dashes_count,FLOAT *dash_offset) {
    This->lpVtbl->GetStroke(This,brush,stroke_width,dashes,dashes_count,dash_offset);
}
#endif
#endif

#endif


#endif  /* __ID2D1SvgGlyphStyle_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1DeviceContext2 interface
 */
#ifndef __ID2D1DeviceContext2_INTERFACE_DEFINED__
#define __ID2D1DeviceContext2_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DeviceContext2, 0x394ea6a3, 0x0c34, 0x4321, 0x95,0x0b, 0x6c,0xa2,0x0f,0x0b,0xe6,0xc7);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("394ea6a3-0c34-4321-950b-6ca20f0be6c7")
ID2D1DeviceContext2 : public ID2D1DeviceContext1
{
    virtual HRESULT STDMETHODCALLTYPE CreateInk(
        const D2D1_INK_POINT *start_point,
        ID2D1Ink **ink) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateInkStyle(
        const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,
        ID2D1InkStyle **ink_style) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateGradientMesh(
        const D2D1_GRADIENT_MESH_PATCH *patches,
        UINT32 patches_count,
        ID2D1GradientMesh **gradient_mesh) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateImageSourceFromWic(
        IWICBitmapSource *wic_bitmap_source,
        D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,
        D2D1_ALPHA_MODE alpha_mode,
        ID2D1ImageSourceFromWic **image_source) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateLookupTable3D(
        D2D1_BUFFER_PRECISION precision,
        const UINT32 *extents,
        const BYTE *data,
        UINT32 data_count,
        const UINT32 *strides,
        ID2D1LookupTable3D **lookup_table) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateImageSourceFromDxgi(
        IDXGISurface **surfaces,
        UINT32 surface_count,
        DXGI_COLOR_SPACE_TYPE color_space,
        D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,
        ID2D1ImageSource **image_source) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGradientMeshWorldBounds(
        ID2D1GradientMesh *gradient_mesh,
        D2D1_RECT_F *bounds) = 0;

    virtual void STDMETHODCALLTYPE DrawInk(
        ID2D1Ink *ink,
        ID2D1Brush *brush,
        ID2D1InkStyle *ink_style) = 0;

    virtual void STDMETHODCALLTYPE DrawGradientMesh(
        ID2D1GradientMesh *gradient_mesh) = 0;

    virtual void STDMETHODCALLTYPE DrawGdiMetafile(
        ID2D1GdiMetafile *gdi_metafile,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateTransformedImageSource(
        ID2D1ImageSource *source,
        const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,
        ID2D1TransformedImageSource **transformed) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DeviceContext2, 0x394ea6a3, 0x0c34, 0x4321, 0x95,0x0b, 0x6c,0xa2,0x0f,0x0b,0xe6,0xc7)
#endif
#else
typedef struct ID2D1DeviceContext2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1DeviceContext2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1DeviceContext2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1DeviceContext2 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1DeviceContext2 *This,
        ID2D1Factory **factory);

    /*** ID2D1RenderTarget methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateBitmap)(
        ID2D1DeviceContext2 *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext2 *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateSharedBitmap)(
        ID2D1DeviceContext2 *This,
        REFIID iid,
        void *data,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapBrush)(
        ID2D1DeviceContext2 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateSolidColorBrush)(
        ID2D1DeviceContext2 *This,
        const D2D1_COLOR_F *color,
        const D2D1_BRUSH_PROPERTIES *desc,
        ID2D1SolidColorBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateGradientStopCollection)(
        ID2D1DeviceContext2 *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_GAMMA gamma,
        D2D1_EXTEND_MODE extend_mode,
        ID2D1GradientStopCollection **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateLinearGradientBrush)(
        ID2D1DeviceContext2 *This,
        const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1LinearGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateRadialGradientBrush)(
        ID2D1DeviceContext2 *This,
        const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1RadialGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateCompatibleRenderTarget)(
        ID2D1DeviceContext2 *This,
        const D2D1_SIZE_F *size,
        const D2D1_SIZE_U *pixel_size,
        const D2D1_PIXEL_FORMAT *format,
        D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,
        ID2D1BitmapRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateLayer)(
        ID2D1DeviceContext2 *This,
        const D2D1_SIZE_F *size,
        ID2D1Layer **layer);

    HRESULT (STDMETHODCALLTYPE *CreateMesh)(
        ID2D1DeviceContext2 *This,
        ID2D1Mesh **mesh);

    void (STDMETHODCALLTYPE *DrawLine)(
        ID2D1DeviceContext2 *This,
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *DrawRectangle)(
        ID2D1DeviceContext2 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRectangle)(
        ID2D1DeviceContext2 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawRoundedRectangle)(
        ID2D1DeviceContext2 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRoundedRectangle)(
        ID2D1DeviceContext2 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawEllipse)(
        ID2D1DeviceContext2 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillEllipse)(
        ID2D1DeviceContext2 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawGeometry)(
        ID2D1DeviceContext2 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillGeometry)(
        ID2D1DeviceContext2 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        ID2D1Brush *opacity_brush);

    void (STDMETHODCALLTYPE *FillMesh)(
        ID2D1DeviceContext2 *This,
        ID2D1Mesh *mesh,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *FillOpacityMask)(
        ID2D1DeviceContext2 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        D2D1_OPACITY_MASK_CONTENT content,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawBitmap)(
        ID2D1DeviceContext2 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawText)(
        ID2D1DeviceContext2 *This,
        const WCHAR *string,
        UINT32 string_len,
        IDWriteTextFormat *text_format,
        const D2D1_RECT_F *layout_rect,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawTextLayout)(
        ID2D1DeviceContext2 *This,
        D2D1_POINT_2F origin,
        IDWriteTextLayout *layout,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options);

    void (STDMETHODCALLTYPE *DrawGlyphRun)(
        ID2D1DeviceContext2 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *SetTransform)(
        ID2D1DeviceContext2 *This,
        const D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *GetTransform)(
        ID2D1DeviceContext2 *This,
        D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *SetAntialiasMode)(
        ID2D1DeviceContext2 *This,
        D2D1_ANTIALIAS_MODE antialias_mode);

    D2D1_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetAntialiasMode)(
        ID2D1DeviceContext2 *This);

    void (STDMETHODCALLTYPE *SetTextAntialiasMode)(
        ID2D1DeviceContext2 *This,
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode);

    D2D1_TEXT_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetTextAntialiasMode)(
        ID2D1DeviceContext2 *This);

    void (STDMETHODCALLTYPE *SetTextRenderingParams)(
        ID2D1DeviceContext2 *This,
        IDWriteRenderingParams *text_rendering_params);

    void (STDMETHODCALLTYPE *GetTextRenderingParams)(
        ID2D1DeviceContext2 *This,
        IDWriteRenderingParams **text_rendering_params);

    void (STDMETHODCALLTYPE *SetTags)(
        ID2D1DeviceContext2 *This,
        D2D1_TAG tag1,
        D2D1_TAG tag2);

    void (STDMETHODCALLTYPE *GetTags)(
        ID2D1DeviceContext2 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *PushLayer)(
        ID2D1DeviceContext2 *This,
        const D2D1_LAYER_PARAMETERS *layer_parameters,
        ID2D1Layer *layer);

    void (STDMETHODCALLTYPE *PopLayer)(
        ID2D1DeviceContext2 *This);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        ID2D1DeviceContext2 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *SaveDrawingState)(
        ID2D1DeviceContext2 *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *RestoreDrawingState)(
        ID2D1DeviceContext2 *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *PushAxisAlignedClip)(
        ID2D1DeviceContext2 *This,
        const D2D1_RECT_F *clip_rect,
        D2D1_ANTIALIAS_MODE antialias_mode);

    void (STDMETHODCALLTYPE *PopAxisAlignedClip)(
        ID2D1DeviceContext2 *This);

    void (STDMETHODCALLTYPE *Clear)(
        ID2D1DeviceContext2 *This,
        const D2D1_COLOR_F *color);

    void (STDMETHODCALLTYPE *BeginDraw)(
        ID2D1DeviceContext2 *This);

    HRESULT (STDMETHODCALLTYPE *EndDraw)(
        ID2D1DeviceContext2 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    D2D1_PIXEL_FORMAT * (STDMETHODCALLTYPE *GetPixelFormat)(
        ID2D1DeviceContext2 *This,
        D2D1_PIXEL_FORMAT *__ret);

    void (STDMETHODCALLTYPE *SetDpi)(
        ID2D1DeviceContext2 *This,
        float dpi_x,
        float dpi_y);

    void (STDMETHODCALLTYPE *GetDpi)(
        ID2D1DeviceContext2 *This,
        float *dpi_x,
        float *dpi_y);

    D2D1_SIZE_F * (STDMETHODCALLTYPE *GetSize)(
        ID2D1DeviceContext2 *This,
        D2D1_SIZE_F *__ret);

    D2D1_SIZE_U * (STDMETHODCALLTYPE *GetPixelSize)(
        ID2D1DeviceContext2 *This,
        D2D1_SIZE_U *__ret);

    UINT32 (STDMETHODCALLTYPE *GetMaximumBitmapSize)(
        ID2D1DeviceContext2 *This);

    BOOL (STDMETHODCALLTYPE *IsSupported)(
        ID2D1DeviceContext2 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc);

    /*** ID2D1DeviceContext methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmap)(
        ID2D1DeviceContext2 *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext2 *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateColorContext)(
        ID2D1DeviceContext2 *This,
        D2D1_COLOR_SPACE space,
        const BYTE *profile,
        UINT32 profile_size,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromFilename)(
        ID2D1DeviceContext2 *This,
        const WCHAR *filename,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromWicColorContext)(
        ID2D1DeviceContext2 *This,
        IWICColorContext *wic_color_context,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromDxgiSurface)(
        ID2D1DeviceContext2 *This,
        IDXGISurface *surface,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateEffect)(
        ID2D1DeviceContext2 *This,
        REFCLSID effect_id,
        ID2D1Effect **effect);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateGradientStopCollection)(
        ID2D1DeviceContext2 *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_COLOR_SPACE preinterpolation_space,
        D2D1_COLOR_SPACE postinterpolation_space,
        D2D1_BUFFER_PRECISION buffer_precision,
        D2D1_EXTEND_MODE extend_mode,
        D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,
        ID2D1GradientStopCollection1 **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateImageBrush)(
        ID2D1DeviceContext2 *This,
        ID2D1Image *image,
        const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1ImageBrush **brush);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapBrush)(
        ID2D1DeviceContext2 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush1 **bitmap_brush);

    HRESULT (STDMETHODCALLTYPE *CreateCommandList)(
        ID2D1DeviceContext2 *This,
        ID2D1CommandList **command_list);

    BOOL (STDMETHODCALLTYPE *IsDxgiFormatSupported)(
        ID2D1DeviceContext2 *This,
        DXGI_FORMAT format);

    BOOL (STDMETHODCALLTYPE *IsBufferPrecisionSupported)(
        ID2D1DeviceContext2 *This,
        D2D1_BUFFER_PRECISION buffer_precision);

    HRESULT (STDMETHODCALLTYPE *GetImageLocalBounds)(
        ID2D1DeviceContext2 *This,
        ID2D1Image *image,
        D2D1_RECT_F *local_bounds);

    HRESULT (STDMETHODCALLTYPE *GetImageWorldBounds)(
        ID2D1DeviceContext2 *This,
        ID2D1Image *image,
        D2D1_RECT_F *world_bounds);

    HRESULT (STDMETHODCALLTYPE *GetGlyphRunWorldBounds)(
        ID2D1DeviceContext2 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *GetDevice)(
        ID2D1DeviceContext2 *This,
        ID2D1Device **device);

    void (STDMETHODCALLTYPE *SetTarget)(
        ID2D1DeviceContext2 *This,
        ID2D1Image *target);

    void (STDMETHODCALLTYPE *GetTarget)(
        ID2D1DeviceContext2 *This,
        ID2D1Image **target);

    void (STDMETHODCALLTYPE *SetRenderingControls)(
        ID2D1DeviceContext2 *This,
        const D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *GetRenderingControls)(
        ID2D1DeviceContext2 *This,
        D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *SetPrimitiveBlend)(
        ID2D1DeviceContext2 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    D2D1_PRIMITIVE_BLEND (STDMETHODCALLTYPE *GetPrimitiveBlend)(
        ID2D1DeviceContext2 *This);

    void (STDMETHODCALLTYPE *SetUnitMode)(
        ID2D1DeviceContext2 *This,
        D2D1_UNIT_MODE unit_mode);

    D2D1_UNIT_MODE (STDMETHODCALLTYPE *GetUnitMode)(
        ID2D1DeviceContext2 *This);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawGlyphRun)(
        ID2D1DeviceContext2 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawImage)(
        ID2D1DeviceContext2 *This,
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode);

    void (STDMETHODCALLTYPE *DrawGdiMetafile)(
        ID2D1DeviceContext2 *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawBitmap)(
        ID2D1DeviceContext2 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_PushLayer)(
        ID2D1DeviceContext2 *This,
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer);

    HRESULT (STDMETHODCALLTYPE *InvalidateEffectInputRectangle)(
        ID2D1DeviceContext2 *This,
        ID2D1Effect *effect,
        UINT32 input,
        const D2D1_RECT_F *input_rect);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangleCount)(
        ID2D1DeviceContext2 *This,
        ID2D1Effect *effect,
        UINT32 *rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangles)(
        ID2D1DeviceContext2 *This,
        ID2D1Effect *effect,
        D2D1_RECT_F *rectangles,
        UINT32 rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectRequiredInputRectangles)(
        ID2D1DeviceContext2 *This,
        ID2D1Effect *effect,
        const D2D1_RECT_F *image_rect,
        const D2D1_EFFECT_INPUT_DESCRIPTION *desc,
        D2D1_RECT_F *input_rect,
        UINT32 input_count);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_FillOpacityMask)(
        ID2D1DeviceContext2 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    /*** ID2D1DeviceContext1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateFilledGeometryRealization)(
        ID2D1DeviceContext2 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        ID2D1GeometryRealization **realization);

    HRESULT (STDMETHODCALLTYPE *CreateStrokedGeometryRealization)(
        ID2D1DeviceContext2 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        ID2D1GeometryRealization **realization);

    void (STDMETHODCALLTYPE *DrawGeometryRealization)(
        ID2D1DeviceContext2 *This,
        ID2D1GeometryRealization *realization,
        ID2D1Brush *brush);

    /*** ID2D1DeviceContext2 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateInk)(
        ID2D1DeviceContext2 *This,
        const D2D1_INK_POINT *start_point,
        ID2D1Ink **ink);

    HRESULT (STDMETHODCALLTYPE *CreateInkStyle)(
        ID2D1DeviceContext2 *This,
        const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,
        ID2D1InkStyle **ink_style);

    HRESULT (STDMETHODCALLTYPE *CreateGradientMesh)(
        ID2D1DeviceContext2 *This,
        const D2D1_GRADIENT_MESH_PATCH *patches,
        UINT32 patches_count,
        ID2D1GradientMesh **gradient_mesh);

    HRESULT (STDMETHODCALLTYPE *CreateImageSourceFromWic)(
        ID2D1DeviceContext2 *This,
        IWICBitmapSource *wic_bitmap_source,
        D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,
        D2D1_ALPHA_MODE alpha_mode,
        ID2D1ImageSourceFromWic **image_source);

    HRESULT (STDMETHODCALLTYPE *CreateLookupTable3D)(
        ID2D1DeviceContext2 *This,
        D2D1_BUFFER_PRECISION precision,
        const UINT32 *extents,
        const BYTE *data,
        UINT32 data_count,
        const UINT32 *strides,
        ID2D1LookupTable3D **lookup_table);

    HRESULT (STDMETHODCALLTYPE *CreateImageSourceFromDxgi)(
        ID2D1DeviceContext2 *This,
        IDXGISurface **surfaces,
        UINT32 surface_count,
        DXGI_COLOR_SPACE_TYPE color_space,
        D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,
        ID2D1ImageSource **image_source);

    HRESULT (STDMETHODCALLTYPE *GetGradientMeshWorldBounds)(
        ID2D1DeviceContext2 *This,
        ID2D1GradientMesh *gradient_mesh,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *DrawInk)(
        ID2D1DeviceContext2 *This,
        ID2D1Ink *ink,
        ID2D1Brush *brush,
        ID2D1InkStyle *ink_style);

    void (STDMETHODCALLTYPE *DrawGradientMesh)(
        ID2D1DeviceContext2 *This,
        ID2D1GradientMesh *gradient_mesh);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext2_DrawGdiMetafile)(
        ID2D1DeviceContext2 *This,
        ID2D1GdiMetafile *gdi_metafile,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedImageSource)(
        ID2D1DeviceContext2 *This,
        ID2D1ImageSource *source,
        const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,
        ID2D1TransformedImageSource **transformed);

    END_INTERFACE
} ID2D1DeviceContext2Vtbl;

interface ID2D1DeviceContext2 {
    CONST_VTBL ID2D1DeviceContext2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DeviceContext2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DeviceContext2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DeviceContext2_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1DeviceContext2_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1RenderTarget methods ***/
#define ID2D1DeviceContext2_CreateSharedBitmap(This,iid,data,desc,bitmap) (This)->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap)
#define ID2D1DeviceContext2_CreateSolidColorBrush(This,color,desc,brush) (This)->lpVtbl->CreateSolidColorBrush(This,color,desc,brush)
#define ID2D1DeviceContext2_CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext2_CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext2_CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target) (This)->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target)
#define ID2D1DeviceContext2_CreateLayer(This,size,layer) (This)->lpVtbl->CreateLayer(This,size,layer)
#define ID2D1DeviceContext2_CreateMesh(This,mesh) (This)->lpVtbl->CreateMesh(This,mesh)
#define ID2D1DeviceContext2_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext2_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext2_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1DeviceContext2_DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext2_FillRoundedRectangle(This,rect,brush) (This)->lpVtbl->FillRoundedRectangle(This,rect,brush)
#define ID2D1DeviceContext2_DrawEllipse(This,ellipse,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext2_FillEllipse(This,ellipse,brush) (This)->lpVtbl->FillEllipse(This,ellipse,brush)
#define ID2D1DeviceContext2_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext2_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1DeviceContext2_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1DeviceContext2_DrawText(This,string,string_len,text_format,layout_rect,brush,options,measuring_mode) (This)->lpVtbl->DrawText(This,string,string_len,text_format,layout_rect,brush,options,measuring_mode)
#define ID2D1DeviceContext2_DrawTextLayout(This,origin,layout,brush,options) (This)->lpVtbl->DrawTextLayout(This,origin,layout,brush,options)
#define ID2D1DeviceContext2_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1DeviceContext2_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#define ID2D1DeviceContext2_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext2_GetAntialiasMode(This) (This)->lpVtbl->GetAntialiasMode(This)
#define ID2D1DeviceContext2_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext2_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
#define ID2D1DeviceContext2_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext2_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext2_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1DeviceContext2_GetTags(This,tag1,tag2) (This)->lpVtbl->GetTags(This,tag1,tag2)
#define ID2D1DeviceContext2_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#define ID2D1DeviceContext2_Flush(This,tag1,tag2) (This)->lpVtbl->Flush(This,tag1,tag2)
#define ID2D1DeviceContext2_SaveDrawingState(This,state_block) (This)->lpVtbl->SaveDrawingState(This,state_block)
#define ID2D1DeviceContext2_RestoreDrawingState(This,state_block) (This)->lpVtbl->RestoreDrawingState(This,state_block)
#define ID2D1DeviceContext2_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1DeviceContext2_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1DeviceContext2_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1DeviceContext2_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1DeviceContext2_EndDraw(This,tag1,tag2) (This)->lpVtbl->EndDraw(This,tag1,tag2)
#define ID2D1DeviceContext2_GetPixelFormat(This) ID2D1DeviceContext2_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext2_SetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->SetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext2_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext2_GetSize(This) ID2D1DeviceContext2_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext2_GetPixelSize(This) ID2D1DeviceContext2_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext2_GetMaximumBitmapSize(This) (This)->lpVtbl->GetMaximumBitmapSize(This)
#define ID2D1DeviceContext2_IsSupported(This,desc) (This)->lpVtbl->IsSupported(This,desc)
/*** ID2D1DeviceContext methods ***/
#define ID2D1DeviceContext2_CreateBitmap(This,size,src_data,pitch,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap)
#define ID2D1DeviceContext2_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap)
#define ID2D1DeviceContext2_CreateColorContext(This,space,profile,profile_size,color_context) (This)->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context)
#define ID2D1DeviceContext2_CreateColorContextFromFilename(This,filename,color_context) (This)->lpVtbl->CreateColorContextFromFilename(This,filename,color_context)
#define ID2D1DeviceContext2_CreateColorContextFromWicColorContext(This,wic_color_context,color_context) (This)->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context)
#define ID2D1DeviceContext2_CreateBitmapFromDxgiSurface(This,surface,desc,bitmap) (This)->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap)
#define ID2D1DeviceContext2_CreateEffect(This,effect_id,effect) (This)->lpVtbl->CreateEffect(This,effect_id,effect)
#define ID2D1DeviceContext2_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient) (This)->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient)
#define ID2D1DeviceContext2_CreateImageBrush(This,image,image_brush_desc,brush_desc,brush) (This)->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush)
#define ID2D1DeviceContext2_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush)
#define ID2D1DeviceContext2_CreateCommandList(This,command_list) (This)->lpVtbl->CreateCommandList(This,command_list)
#define ID2D1DeviceContext2_IsDxgiFormatSupported(This,format) (This)->lpVtbl->IsDxgiFormatSupported(This,format)
#define ID2D1DeviceContext2_IsBufferPrecisionSupported(This,buffer_precision) (This)->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision)
#define ID2D1DeviceContext2_GetImageLocalBounds(This,image,local_bounds) (This)->lpVtbl->GetImageLocalBounds(This,image,local_bounds)
#define ID2D1DeviceContext2_GetImageWorldBounds(This,image,world_bounds) (This)->lpVtbl->GetImageWorldBounds(This,image,world_bounds)
#define ID2D1DeviceContext2_GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds) (This)->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds)
#define ID2D1DeviceContext2_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define ID2D1DeviceContext2_SetTarget(This,target) (This)->lpVtbl->SetTarget(This,target)
#define ID2D1DeviceContext2_GetTarget(This,target) (This)->lpVtbl->GetTarget(This,target)
#define ID2D1DeviceContext2_SetRenderingControls(This,rendering_controls) (This)->lpVtbl->SetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext2_GetRenderingControls(This,rendering_controls) (This)->lpVtbl->GetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext2_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1DeviceContext2_GetPrimitiveBlend(This) (This)->lpVtbl->GetPrimitiveBlend(This)
#define ID2D1DeviceContext2_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1DeviceContext2_GetUnitMode(This) (This)->lpVtbl->GetUnitMode(This)
#define ID2D1DeviceContext2_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode) (This)->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode)
#define ID2D1DeviceContext2_DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode) (This)->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode)
#define ID2D1DeviceContext2_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform) (This)->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform)
#define ID2D1DeviceContext2_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer)
#define ID2D1DeviceContext2_InvalidateEffectInputRectangle(This,effect,input,input_rect) (This)->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect)
#define ID2D1DeviceContext2_GetEffectInvalidRectangleCount(This,effect,rect_count) (This)->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count)
#define ID2D1DeviceContext2_GetEffectInvalidRectangles(This,effect,rectangles,rect_count) (This)->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count)
#define ID2D1DeviceContext2_GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count) (This)->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count)
#define ID2D1DeviceContext2_FillOpacityMask(This,mask,brush,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect)
/*** ID2D1DeviceContext1 methods ***/
#define ID2D1DeviceContext2_CreateFilledGeometryRealization(This,geometry,tolerance,realization) (This)->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization)
#define ID2D1DeviceContext2_CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization) (This)->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization)
#define ID2D1DeviceContext2_DrawGeometryRealization(This,realization,brush) (This)->lpVtbl->DrawGeometryRealization(This,realization,brush)
/*** ID2D1DeviceContext2 methods ***/
#define ID2D1DeviceContext2_CreateInk(This,start_point,ink) (This)->lpVtbl->CreateInk(This,start_point,ink)
#define ID2D1DeviceContext2_CreateInkStyle(This,ink_style_properties,ink_style) (This)->lpVtbl->CreateInkStyle(This,ink_style_properties,ink_style)
#define ID2D1DeviceContext2_CreateGradientMesh(This,patches,patches_count,gradient_mesh) (This)->lpVtbl->CreateGradientMesh(This,patches,patches_count,gradient_mesh)
#define ID2D1DeviceContext2_CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source) (This)->lpVtbl->CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source)
#define ID2D1DeviceContext2_CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table) (This)->lpVtbl->CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table)
#define ID2D1DeviceContext2_CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source) (This)->lpVtbl->CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source)
#define ID2D1DeviceContext2_GetGradientMeshWorldBounds(This,gradient_mesh,bounds) (This)->lpVtbl->GetGradientMeshWorldBounds(This,gradient_mesh,bounds)
#define ID2D1DeviceContext2_DrawInk(This,ink,brush,ink_style) (This)->lpVtbl->DrawInk(This,ink,brush,ink_style)
#define ID2D1DeviceContext2_DrawGradientMesh(This,gradient_mesh) (This)->lpVtbl->DrawGradientMesh(This,gradient_mesh)
#define ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect)
#define ID2D1DeviceContext2_CreateTransformedImageSource(This,source,props,transformed) (This)->lpVtbl->CreateTransformedImageSource(This,source,props,transformed)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1DeviceContext2_QueryInterface(ID2D1DeviceContext2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1DeviceContext2_AddRef(ID2D1DeviceContext2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1DeviceContext2_Release(ID2D1DeviceContext2* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1DeviceContext2_GetFactory(ID2D1DeviceContext2* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1RenderTarget methods ***/
static inline HRESULT ID2D1DeviceContext2_CreateSharedBitmap(ID2D1DeviceContext2* This,REFIID iid,void *data,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext2_CreateSolidColorBrush(ID2D1DeviceContext2* This,const D2D1_COLOR_F *color,const D2D1_BRUSH_PROPERTIES *desc,ID2D1SolidColorBrush **brush) {
    return This->lpVtbl->CreateSolidColorBrush(This,color,desc,brush);
}
static inline HRESULT ID2D1DeviceContext2_CreateLinearGradientBrush(ID2D1DeviceContext2* This,const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1LinearGradientBrush **brush) {
    return This->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext2_CreateRadialGradientBrush(ID2D1DeviceContext2* This,const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1RadialGradientBrush **brush) {
    return This->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext2_CreateCompatibleRenderTarget(ID2D1DeviceContext2* This,const D2D1_SIZE_F *size,const D2D1_SIZE_U *pixel_size,const D2D1_PIXEL_FORMAT *format,D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,ID2D1BitmapRenderTarget **render_target) {
    return This->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target);
}
static inline HRESULT ID2D1DeviceContext2_CreateLayer(ID2D1DeviceContext2* This,const D2D1_SIZE_F *size,ID2D1Layer **layer) {
    return This->lpVtbl->CreateLayer(This,size,layer);
}
static inline HRESULT ID2D1DeviceContext2_CreateMesh(ID2D1DeviceContext2* This,ID2D1Mesh **mesh) {
    return This->lpVtbl->CreateMesh(This,mesh);
}
static inline void ID2D1DeviceContext2_DrawLine(ID2D1DeviceContext2* This,D2D1_POINT_2F p0,D2D1_POINT_2F p1,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext2_DrawRectangle(ID2D1DeviceContext2* This,const D2D1_RECT_F *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext2_FillRectangle(ID2D1DeviceContext2* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext2_DrawRoundedRectangle(ID2D1DeviceContext2* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext2_FillRoundedRectangle(ID2D1DeviceContext2* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRoundedRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext2_DrawEllipse(ID2D1DeviceContext2* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext2_FillEllipse(ID2D1DeviceContext2* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush) {
    This->lpVtbl->FillEllipse(This,ellipse,brush);
}
static inline void ID2D1DeviceContext2_DrawGeometry(ID2D1DeviceContext2* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext2_FillGeometry(ID2D1DeviceContext2* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline void ID2D1DeviceContext2_FillMesh(ID2D1DeviceContext2* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline void ID2D1DeviceContext2_DrawText(ID2D1DeviceContext2* This,const WCHAR *string,UINT32 string_len,IDWriteTextFormat *text_format,const D2D1_RECT_F *layout_rect,ID2D1Brush *brush,D2D1_DRAW_TEXT_OPTIONS options,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->DrawText(This,string,string_len,text_format,layout_rect,brush,options,measuring_mode);
}
static inline void ID2D1DeviceContext2_DrawTextLayout(ID2D1DeviceContext2* This,D2D1_POINT_2F origin,IDWriteTextLayout *layout,ID2D1Brush *brush,D2D1_DRAW_TEXT_OPTIONS options) {
    This->lpVtbl->DrawTextLayout(This,origin,layout,brush,options);
}
static inline void ID2D1DeviceContext2_SetTransform(ID2D1DeviceContext2* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static inline void ID2D1DeviceContext2_GetTransform(ID2D1DeviceContext2* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
static inline void ID2D1DeviceContext2_SetAntialiasMode(ID2D1DeviceContext2* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline D2D1_ANTIALIAS_MODE ID2D1DeviceContext2_GetAntialiasMode(ID2D1DeviceContext2* This) {
    return This->lpVtbl->GetAntialiasMode(This);
}
static inline void ID2D1DeviceContext2_SetTextAntialiasMode(ID2D1DeviceContext2* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline D2D1_TEXT_ANTIALIAS_MODE ID2D1DeviceContext2_GetTextAntialiasMode(ID2D1DeviceContext2* This) {
    return This->lpVtbl->GetTextAntialiasMode(This);
}
static inline void ID2D1DeviceContext2_SetTextRenderingParams(ID2D1DeviceContext2* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext2_GetTextRenderingParams(ID2D1DeviceContext2* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext2_SetTags(ID2D1DeviceContext2* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext2_GetTags(ID2D1DeviceContext2* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    This->lpVtbl->GetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext2_PopLayer(ID2D1DeviceContext2* This) {
    This->lpVtbl->PopLayer(This);
}
static inline HRESULT ID2D1DeviceContext2_Flush(ID2D1DeviceContext2* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->Flush(This,tag1,tag2);
}
static inline void ID2D1DeviceContext2_SaveDrawingState(ID2D1DeviceContext2* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->SaveDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext2_RestoreDrawingState(ID2D1DeviceContext2* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->RestoreDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext2_PushAxisAlignedClip(ID2D1DeviceContext2* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline void ID2D1DeviceContext2_PopAxisAlignedClip(ID2D1DeviceContext2* This) {
    This->lpVtbl->PopAxisAlignedClip(This);
}
static inline void ID2D1DeviceContext2_Clear(ID2D1DeviceContext2* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->Clear(This,color);
}
static inline void ID2D1DeviceContext2_BeginDraw(ID2D1DeviceContext2* This) {
    This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1DeviceContext2_EndDraw(ID2D1DeviceContext2* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->EndDraw(This,tag1,tag2);
}
static inline D2D1_PIXEL_FORMAT ID2D1DeviceContext2_GetPixelFormat(ID2D1DeviceContext2* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static inline void ID2D1DeviceContext2_SetDpi(ID2D1DeviceContext2* This,float dpi_x,float dpi_y) {
    This->lpVtbl->SetDpi(This,dpi_x,dpi_y);
}
static inline void ID2D1DeviceContext2_GetDpi(ID2D1DeviceContext2* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static inline D2D1_SIZE_F ID2D1DeviceContext2_GetSize(ID2D1DeviceContext2* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static inline D2D1_SIZE_U ID2D1DeviceContext2_GetPixelSize(ID2D1DeviceContext2* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static inline UINT32 ID2D1DeviceContext2_GetMaximumBitmapSize(ID2D1DeviceContext2* This) {
    return This->lpVtbl->GetMaximumBitmapSize(This);
}
static inline BOOL ID2D1DeviceContext2_IsSupported(ID2D1DeviceContext2* This,const D2D1_RENDER_TARGET_PROPERTIES *desc) {
    return This->lpVtbl->IsSupported(This,desc);
}
/*** ID2D1DeviceContext methods ***/
static inline HRESULT ID2D1DeviceContext2_CreateBitmap(ID2D1DeviceContext2* This,D2D1_SIZE_U size,const void *src_data,UINT32 pitch,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext2_CreateBitmapFromWicBitmap(ID2D1DeviceContext2* This,IWICBitmapSource *bitmap_source,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext2_CreateColorContext(ID2D1DeviceContext2* This,D2D1_COLOR_SPACE space,const BYTE *profile,UINT32 profile_size,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context);
}
static inline HRESULT ID2D1DeviceContext2_CreateColorContextFromFilename(ID2D1DeviceContext2* This,const WCHAR *filename,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromFilename(This,filename,color_context);
}
static inline HRESULT ID2D1DeviceContext2_CreateColorContextFromWicColorContext(ID2D1DeviceContext2* This,IWICColorContext *wic_color_context,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context);
}
static inline HRESULT ID2D1DeviceContext2_CreateBitmapFromDxgiSurface(ID2D1DeviceContext2* This,IDXGISurface *surface,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext2_CreateEffect(ID2D1DeviceContext2* This,REFCLSID effect_id,ID2D1Effect **effect) {
    return This->lpVtbl->CreateEffect(This,effect_id,effect);
}
static inline HRESULT ID2D1DeviceContext2_CreateGradientStopCollection(ID2D1DeviceContext2* This,const D2D1_GRADIENT_STOP *stops,UINT32 stop_count,D2D1_COLOR_SPACE preinterpolation_space,D2D1_COLOR_SPACE postinterpolation_space,D2D1_BUFFER_PRECISION buffer_precision,D2D1_EXTEND_MODE extend_mode,D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,ID2D1GradientStopCollection1 **gradient) {
    return This->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient);
}
static inline HRESULT ID2D1DeviceContext2_CreateImageBrush(ID2D1DeviceContext2* This,ID2D1Image *image,const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1ImageBrush **brush) {
    return This->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush);
}
static inline HRESULT ID2D1DeviceContext2_CreateBitmapBrush(ID2D1DeviceContext2* This,ID2D1Bitmap *bitmap,const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1BitmapBrush1 **bitmap_brush) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush);
}
static inline HRESULT ID2D1DeviceContext2_CreateCommandList(ID2D1DeviceContext2* This,ID2D1CommandList **command_list) {
    return This->lpVtbl->CreateCommandList(This,command_list);
}
static inline BOOL ID2D1DeviceContext2_IsDxgiFormatSupported(ID2D1DeviceContext2* This,DXGI_FORMAT format) {
    return This->lpVtbl->IsDxgiFormatSupported(This,format);
}
static inline BOOL ID2D1DeviceContext2_IsBufferPrecisionSupported(ID2D1DeviceContext2* This,D2D1_BUFFER_PRECISION buffer_precision) {
    return This->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision);
}
static inline HRESULT ID2D1DeviceContext2_GetImageLocalBounds(ID2D1DeviceContext2* This,ID2D1Image *image,D2D1_RECT_F *local_bounds) {
    return This->lpVtbl->GetImageLocalBounds(This,image,local_bounds);
}
static inline HRESULT ID2D1DeviceContext2_GetImageWorldBounds(ID2D1DeviceContext2* This,ID2D1Image *image,D2D1_RECT_F *world_bounds) {
    return This->lpVtbl->GetImageWorldBounds(This,image,world_bounds);
}
static inline HRESULT ID2D1DeviceContext2_GetGlyphRunWorldBounds(ID2D1DeviceContext2* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,DWRITE_MEASURING_MODE measuring_mode,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds);
}
static inline void ID2D1DeviceContext2_GetDevice(ID2D1DeviceContext2* This,ID2D1Device **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline void ID2D1DeviceContext2_SetTarget(ID2D1DeviceContext2* This,ID2D1Image *target) {
    This->lpVtbl->SetTarget(This,target);
}
static inline void ID2D1DeviceContext2_GetTarget(ID2D1DeviceContext2* This,ID2D1Image **target) {
    This->lpVtbl->GetTarget(This,target);
}
static inline void ID2D1DeviceContext2_SetRenderingControls(ID2D1DeviceContext2* This,const D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->SetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext2_GetRenderingControls(ID2D1DeviceContext2* This,D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->GetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext2_SetPrimitiveBlend(ID2D1DeviceContext2* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline D2D1_PRIMITIVE_BLEND ID2D1DeviceContext2_GetPrimitiveBlend(ID2D1DeviceContext2* This) {
    return This->lpVtbl->GetPrimitiveBlend(This);
}
static inline void ID2D1DeviceContext2_SetUnitMode(ID2D1DeviceContext2* This,D2D1_UNIT_MODE unit_mode) {
    This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline D2D1_UNIT_MODE ID2D1DeviceContext2_GetUnitMode(ID2D1DeviceContext2* This) {
    return This->lpVtbl->GetUnitMode(This);
}
static inline void ID2D1DeviceContext2_DrawGlyphRun(ID2D1DeviceContext2* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode);
}
static inline void ID2D1DeviceContext2_DrawImage(ID2D1DeviceContext2* This,ID2D1Image *image,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode,D2D1_COMPOSITE_MODE composite_mode) {
    This->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode);
}
static inline void ID2D1DeviceContext2_DrawBitmap(ID2D1DeviceContext2* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect,const D2D1_MATRIX_4X4_F *perspective_transform) {
    This->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform);
}
static inline void ID2D1DeviceContext2_PushLayer(ID2D1DeviceContext2* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    This->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1DeviceContext2_InvalidateEffectInputRectangle(ID2D1DeviceContext2* This,ID2D1Effect *effect,UINT32 input,const D2D1_RECT_F *input_rect) {
    return This->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect);
}
static inline HRESULT ID2D1DeviceContext2_GetEffectInvalidRectangleCount(ID2D1DeviceContext2* This,ID2D1Effect *effect,UINT32 *rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count);
}
static inline HRESULT ID2D1DeviceContext2_GetEffectInvalidRectangles(ID2D1DeviceContext2* This,ID2D1Effect *effect,D2D1_RECT_F *rectangles,UINT32 rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count);
}
static inline HRESULT ID2D1DeviceContext2_GetEffectRequiredInputRectangles(ID2D1DeviceContext2* This,ID2D1Effect *effect,const D2D1_RECT_F *image_rect,const D2D1_EFFECT_INPUT_DESCRIPTION *desc,D2D1_RECT_F *input_rect,UINT32 input_count) {
    return This->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count);
}
static inline void ID2D1DeviceContext2_FillOpacityMask(ID2D1DeviceContext2* This,ID2D1Bitmap *mask,ID2D1Brush *brush,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect);
}
/*** ID2D1DeviceContext1 methods ***/
static inline HRESULT ID2D1DeviceContext2_CreateFilledGeometryRealization(ID2D1DeviceContext2* This,ID2D1Geometry *geometry,float tolerance,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization);
}
static inline HRESULT ID2D1DeviceContext2_CreateStrokedGeometryRealization(ID2D1DeviceContext2* This,ID2D1Geometry *geometry,float tolerance,float stroke_width,ID2D1StrokeStyle *stroke_style,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization);
}
static inline void ID2D1DeviceContext2_DrawGeometryRealization(ID2D1DeviceContext2* This,ID2D1GeometryRealization *realization,ID2D1Brush *brush) {
    This->lpVtbl->DrawGeometryRealization(This,realization,brush);
}
/*** ID2D1DeviceContext2 methods ***/
static inline HRESULT ID2D1DeviceContext2_CreateInk(ID2D1DeviceContext2* This,const D2D1_INK_POINT *start_point,ID2D1Ink **ink) {
    return This->lpVtbl->CreateInk(This,start_point,ink);
}
static inline HRESULT ID2D1DeviceContext2_CreateInkStyle(ID2D1DeviceContext2* This,const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,ID2D1InkStyle **ink_style) {
    return This->lpVtbl->CreateInkStyle(This,ink_style_properties,ink_style);
}
static inline HRESULT ID2D1DeviceContext2_CreateGradientMesh(ID2D1DeviceContext2* This,const D2D1_GRADIENT_MESH_PATCH *patches,UINT32 patches_count,ID2D1GradientMesh **gradient_mesh) {
    return This->lpVtbl->CreateGradientMesh(This,patches,patches_count,gradient_mesh);
}
static inline HRESULT ID2D1DeviceContext2_CreateImageSourceFromWic(ID2D1DeviceContext2* This,IWICBitmapSource *wic_bitmap_source,D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,D2D1_ALPHA_MODE alpha_mode,ID2D1ImageSourceFromWic **image_source) {
    return This->lpVtbl->CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source);
}
static inline HRESULT ID2D1DeviceContext2_CreateLookupTable3D(ID2D1DeviceContext2* This,D2D1_BUFFER_PRECISION precision,const UINT32 *extents,const BYTE *data,UINT32 data_count,const UINT32 *strides,ID2D1LookupTable3D **lookup_table) {
    return This->lpVtbl->CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table);
}
static inline HRESULT ID2D1DeviceContext2_CreateImageSourceFromDxgi(ID2D1DeviceContext2* This,IDXGISurface **surfaces,UINT32 surface_count,DXGI_COLOR_SPACE_TYPE color_space,D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,ID2D1ImageSource **image_source) {
    return This->lpVtbl->CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source);
}
static inline HRESULT ID2D1DeviceContext2_GetGradientMeshWorldBounds(ID2D1DeviceContext2* This,ID2D1GradientMesh *gradient_mesh,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGradientMeshWorldBounds(This,gradient_mesh,bounds);
}
static inline void ID2D1DeviceContext2_DrawInk(ID2D1DeviceContext2* This,ID2D1Ink *ink,ID2D1Brush *brush,ID2D1InkStyle *ink_style) {
    This->lpVtbl->DrawInk(This,ink,brush,ink_style);
}
static inline void ID2D1DeviceContext2_DrawGradientMesh(ID2D1DeviceContext2* This,ID2D1GradientMesh *gradient_mesh) {
    This->lpVtbl->DrawGradientMesh(This,gradient_mesh);
}
static inline void ID2D1DeviceContext2_DrawGdiMetafile(ID2D1DeviceContext2* This,ID2D1GdiMetafile *gdi_metafile,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect);
}
static inline HRESULT ID2D1DeviceContext2_CreateTransformedImageSource(ID2D1DeviceContext2* This,ID2D1ImageSource *source,const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,ID2D1TransformedImageSource **transformed) {
    return This->lpVtbl->CreateTransformedImageSource(This,source,props,transformed);
}
#endif
#endif

#endif


#endif  /* __ID2D1DeviceContext2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1DeviceContext3 interface
 */
#ifndef __ID2D1DeviceContext3_INTERFACE_DEFINED__
#define __ID2D1DeviceContext3_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DeviceContext3, 0x235a7496, 0x8351, 0x414c, 0xbc,0xd4, 0x66,0x72,0xab,0x2d,0x8e,0x00);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("235a7496-8351-414c-bcd4-6672ab2d8e00")
ID2D1DeviceContext3 : public ID2D1DeviceContext2
{
    virtual HRESULT STDMETHODCALLTYPE CreateSpriteBatch(
        ID2D1SpriteBatch **sprite_batch) = 0;

    virtual void STDMETHODCALLTYPE DrawSpriteBatch(
        ID2D1SpriteBatch *sprite_batch,
        UINT32 start_index,
        UINT32 sprite_count,
        ID2D1Bitmap *bitmap,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        D2D1_SPRITE_OPTIONS sprite_options) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DeviceContext3, 0x235a7496, 0x8351, 0x414c, 0xbc,0xd4, 0x66,0x72,0xab,0x2d,0x8e,0x00)
#endif
#else
typedef struct ID2D1DeviceContext3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1DeviceContext3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1DeviceContext3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1DeviceContext3 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1DeviceContext3 *This,
        ID2D1Factory **factory);

    /*** ID2D1RenderTarget methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateBitmap)(
        ID2D1DeviceContext3 *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext3 *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateSharedBitmap)(
        ID2D1DeviceContext3 *This,
        REFIID iid,
        void *data,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapBrush)(
        ID2D1DeviceContext3 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateSolidColorBrush)(
        ID2D1DeviceContext3 *This,
        const D2D1_COLOR_F *color,
        const D2D1_BRUSH_PROPERTIES *desc,
        ID2D1SolidColorBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateGradientStopCollection)(
        ID2D1DeviceContext3 *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_GAMMA gamma,
        D2D1_EXTEND_MODE extend_mode,
        ID2D1GradientStopCollection **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateLinearGradientBrush)(
        ID2D1DeviceContext3 *This,
        const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1LinearGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateRadialGradientBrush)(
        ID2D1DeviceContext3 *This,
        const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1RadialGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateCompatibleRenderTarget)(
        ID2D1DeviceContext3 *This,
        const D2D1_SIZE_F *size,
        const D2D1_SIZE_U *pixel_size,
        const D2D1_PIXEL_FORMAT *format,
        D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,
        ID2D1BitmapRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateLayer)(
        ID2D1DeviceContext3 *This,
        const D2D1_SIZE_F *size,
        ID2D1Layer **layer);

    HRESULT (STDMETHODCALLTYPE *CreateMesh)(
        ID2D1DeviceContext3 *This,
        ID2D1Mesh **mesh);

    void (STDMETHODCALLTYPE *DrawLine)(
        ID2D1DeviceContext3 *This,
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *DrawRectangle)(
        ID2D1DeviceContext3 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRectangle)(
        ID2D1DeviceContext3 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawRoundedRectangle)(
        ID2D1DeviceContext3 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRoundedRectangle)(
        ID2D1DeviceContext3 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawEllipse)(
        ID2D1DeviceContext3 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillEllipse)(
        ID2D1DeviceContext3 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawGeometry)(
        ID2D1DeviceContext3 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillGeometry)(
        ID2D1DeviceContext3 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        ID2D1Brush *opacity_brush);

    void (STDMETHODCALLTYPE *FillMesh)(
        ID2D1DeviceContext3 *This,
        ID2D1Mesh *mesh,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *FillOpacityMask)(
        ID2D1DeviceContext3 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        D2D1_OPACITY_MASK_CONTENT content,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawBitmap)(
        ID2D1DeviceContext3 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawText)(
        ID2D1DeviceContext3 *This,
        const WCHAR *string,
        UINT32 string_len,
        IDWriteTextFormat *text_format,
        const D2D1_RECT_F *layout_rect,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawTextLayout)(
        ID2D1DeviceContext3 *This,
        D2D1_POINT_2F origin,
        IDWriteTextLayout *layout,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options);

    void (STDMETHODCALLTYPE *DrawGlyphRun)(
        ID2D1DeviceContext3 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *SetTransform)(
        ID2D1DeviceContext3 *This,
        const D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *GetTransform)(
        ID2D1DeviceContext3 *This,
        D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *SetAntialiasMode)(
        ID2D1DeviceContext3 *This,
        D2D1_ANTIALIAS_MODE antialias_mode);

    D2D1_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetAntialiasMode)(
        ID2D1DeviceContext3 *This);

    void (STDMETHODCALLTYPE *SetTextAntialiasMode)(
        ID2D1DeviceContext3 *This,
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode);

    D2D1_TEXT_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetTextAntialiasMode)(
        ID2D1DeviceContext3 *This);

    void (STDMETHODCALLTYPE *SetTextRenderingParams)(
        ID2D1DeviceContext3 *This,
        IDWriteRenderingParams *text_rendering_params);

    void (STDMETHODCALLTYPE *GetTextRenderingParams)(
        ID2D1DeviceContext3 *This,
        IDWriteRenderingParams **text_rendering_params);

    void (STDMETHODCALLTYPE *SetTags)(
        ID2D1DeviceContext3 *This,
        D2D1_TAG tag1,
        D2D1_TAG tag2);

    void (STDMETHODCALLTYPE *GetTags)(
        ID2D1DeviceContext3 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *PushLayer)(
        ID2D1DeviceContext3 *This,
        const D2D1_LAYER_PARAMETERS *layer_parameters,
        ID2D1Layer *layer);

    void (STDMETHODCALLTYPE *PopLayer)(
        ID2D1DeviceContext3 *This);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        ID2D1DeviceContext3 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *SaveDrawingState)(
        ID2D1DeviceContext3 *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *RestoreDrawingState)(
        ID2D1DeviceContext3 *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *PushAxisAlignedClip)(
        ID2D1DeviceContext3 *This,
        const D2D1_RECT_F *clip_rect,
        D2D1_ANTIALIAS_MODE antialias_mode);

    void (STDMETHODCALLTYPE *PopAxisAlignedClip)(
        ID2D1DeviceContext3 *This);

    void (STDMETHODCALLTYPE *Clear)(
        ID2D1DeviceContext3 *This,
        const D2D1_COLOR_F *color);

    void (STDMETHODCALLTYPE *BeginDraw)(
        ID2D1DeviceContext3 *This);

    HRESULT (STDMETHODCALLTYPE *EndDraw)(
        ID2D1DeviceContext3 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    D2D1_PIXEL_FORMAT * (STDMETHODCALLTYPE *GetPixelFormat)(
        ID2D1DeviceContext3 *This,
        D2D1_PIXEL_FORMAT *__ret);

    void (STDMETHODCALLTYPE *SetDpi)(
        ID2D1DeviceContext3 *This,
        float dpi_x,
        float dpi_y);

    void (STDMETHODCALLTYPE *GetDpi)(
        ID2D1DeviceContext3 *This,
        float *dpi_x,
        float *dpi_y);

    D2D1_SIZE_F * (STDMETHODCALLTYPE *GetSize)(
        ID2D1DeviceContext3 *This,
        D2D1_SIZE_F *__ret);

    D2D1_SIZE_U * (STDMETHODCALLTYPE *GetPixelSize)(
        ID2D1DeviceContext3 *This,
        D2D1_SIZE_U *__ret);

    UINT32 (STDMETHODCALLTYPE *GetMaximumBitmapSize)(
        ID2D1DeviceContext3 *This);

    BOOL (STDMETHODCALLTYPE *IsSupported)(
        ID2D1DeviceContext3 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc);

    /*** ID2D1DeviceContext methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmap)(
        ID2D1DeviceContext3 *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext3 *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateColorContext)(
        ID2D1DeviceContext3 *This,
        D2D1_COLOR_SPACE space,
        const BYTE *profile,
        UINT32 profile_size,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromFilename)(
        ID2D1DeviceContext3 *This,
        const WCHAR *filename,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromWicColorContext)(
        ID2D1DeviceContext3 *This,
        IWICColorContext *wic_color_context,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromDxgiSurface)(
        ID2D1DeviceContext3 *This,
        IDXGISurface *surface,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateEffect)(
        ID2D1DeviceContext3 *This,
        REFCLSID effect_id,
        ID2D1Effect **effect);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateGradientStopCollection)(
        ID2D1DeviceContext3 *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_COLOR_SPACE preinterpolation_space,
        D2D1_COLOR_SPACE postinterpolation_space,
        D2D1_BUFFER_PRECISION buffer_precision,
        D2D1_EXTEND_MODE extend_mode,
        D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,
        ID2D1GradientStopCollection1 **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateImageBrush)(
        ID2D1DeviceContext3 *This,
        ID2D1Image *image,
        const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1ImageBrush **brush);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapBrush)(
        ID2D1DeviceContext3 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush1 **bitmap_brush);

    HRESULT (STDMETHODCALLTYPE *CreateCommandList)(
        ID2D1DeviceContext3 *This,
        ID2D1CommandList **command_list);

    BOOL (STDMETHODCALLTYPE *IsDxgiFormatSupported)(
        ID2D1DeviceContext3 *This,
        DXGI_FORMAT format);

    BOOL (STDMETHODCALLTYPE *IsBufferPrecisionSupported)(
        ID2D1DeviceContext3 *This,
        D2D1_BUFFER_PRECISION buffer_precision);

    HRESULT (STDMETHODCALLTYPE *GetImageLocalBounds)(
        ID2D1DeviceContext3 *This,
        ID2D1Image *image,
        D2D1_RECT_F *local_bounds);

    HRESULT (STDMETHODCALLTYPE *GetImageWorldBounds)(
        ID2D1DeviceContext3 *This,
        ID2D1Image *image,
        D2D1_RECT_F *world_bounds);

    HRESULT (STDMETHODCALLTYPE *GetGlyphRunWorldBounds)(
        ID2D1DeviceContext3 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *GetDevice)(
        ID2D1DeviceContext3 *This,
        ID2D1Device **device);

    void (STDMETHODCALLTYPE *SetTarget)(
        ID2D1DeviceContext3 *This,
        ID2D1Image *target);

    void (STDMETHODCALLTYPE *GetTarget)(
        ID2D1DeviceContext3 *This,
        ID2D1Image **target);

    void (STDMETHODCALLTYPE *SetRenderingControls)(
        ID2D1DeviceContext3 *This,
        const D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *GetRenderingControls)(
        ID2D1DeviceContext3 *This,
        D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *SetPrimitiveBlend)(
        ID2D1DeviceContext3 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    D2D1_PRIMITIVE_BLEND (STDMETHODCALLTYPE *GetPrimitiveBlend)(
        ID2D1DeviceContext3 *This);

    void (STDMETHODCALLTYPE *SetUnitMode)(
        ID2D1DeviceContext3 *This,
        D2D1_UNIT_MODE unit_mode);

    D2D1_UNIT_MODE (STDMETHODCALLTYPE *GetUnitMode)(
        ID2D1DeviceContext3 *This);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawGlyphRun)(
        ID2D1DeviceContext3 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawImage)(
        ID2D1DeviceContext3 *This,
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode);

    void (STDMETHODCALLTYPE *DrawGdiMetafile)(
        ID2D1DeviceContext3 *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawBitmap)(
        ID2D1DeviceContext3 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_PushLayer)(
        ID2D1DeviceContext3 *This,
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer);

    HRESULT (STDMETHODCALLTYPE *InvalidateEffectInputRectangle)(
        ID2D1DeviceContext3 *This,
        ID2D1Effect *effect,
        UINT32 input,
        const D2D1_RECT_F *input_rect);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangleCount)(
        ID2D1DeviceContext3 *This,
        ID2D1Effect *effect,
        UINT32 *rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangles)(
        ID2D1DeviceContext3 *This,
        ID2D1Effect *effect,
        D2D1_RECT_F *rectangles,
        UINT32 rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectRequiredInputRectangles)(
        ID2D1DeviceContext3 *This,
        ID2D1Effect *effect,
        const D2D1_RECT_F *image_rect,
        const D2D1_EFFECT_INPUT_DESCRIPTION *desc,
        D2D1_RECT_F *input_rect,
        UINT32 input_count);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_FillOpacityMask)(
        ID2D1DeviceContext3 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    /*** ID2D1DeviceContext1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateFilledGeometryRealization)(
        ID2D1DeviceContext3 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        ID2D1GeometryRealization **realization);

    HRESULT (STDMETHODCALLTYPE *CreateStrokedGeometryRealization)(
        ID2D1DeviceContext3 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        ID2D1GeometryRealization **realization);

    void (STDMETHODCALLTYPE *DrawGeometryRealization)(
        ID2D1DeviceContext3 *This,
        ID2D1GeometryRealization *realization,
        ID2D1Brush *brush);

    /*** ID2D1DeviceContext2 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateInk)(
        ID2D1DeviceContext3 *This,
        const D2D1_INK_POINT *start_point,
        ID2D1Ink **ink);

    HRESULT (STDMETHODCALLTYPE *CreateInkStyle)(
        ID2D1DeviceContext3 *This,
        const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,
        ID2D1InkStyle **ink_style);

    HRESULT (STDMETHODCALLTYPE *CreateGradientMesh)(
        ID2D1DeviceContext3 *This,
        const D2D1_GRADIENT_MESH_PATCH *patches,
        UINT32 patches_count,
        ID2D1GradientMesh **gradient_mesh);

    HRESULT (STDMETHODCALLTYPE *CreateImageSourceFromWic)(
        ID2D1DeviceContext3 *This,
        IWICBitmapSource *wic_bitmap_source,
        D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,
        D2D1_ALPHA_MODE alpha_mode,
        ID2D1ImageSourceFromWic **image_source);

    HRESULT (STDMETHODCALLTYPE *CreateLookupTable3D)(
        ID2D1DeviceContext3 *This,
        D2D1_BUFFER_PRECISION precision,
        const UINT32 *extents,
        const BYTE *data,
        UINT32 data_count,
        const UINT32 *strides,
        ID2D1LookupTable3D **lookup_table);

    HRESULT (STDMETHODCALLTYPE *CreateImageSourceFromDxgi)(
        ID2D1DeviceContext3 *This,
        IDXGISurface **surfaces,
        UINT32 surface_count,
        DXGI_COLOR_SPACE_TYPE color_space,
        D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,
        ID2D1ImageSource **image_source);

    HRESULT (STDMETHODCALLTYPE *GetGradientMeshWorldBounds)(
        ID2D1DeviceContext3 *This,
        ID2D1GradientMesh *gradient_mesh,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *DrawInk)(
        ID2D1DeviceContext3 *This,
        ID2D1Ink *ink,
        ID2D1Brush *brush,
        ID2D1InkStyle *ink_style);

    void (STDMETHODCALLTYPE *DrawGradientMesh)(
        ID2D1DeviceContext3 *This,
        ID2D1GradientMesh *gradient_mesh);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext2_DrawGdiMetafile)(
        ID2D1DeviceContext3 *This,
        ID2D1GdiMetafile *gdi_metafile,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedImageSource)(
        ID2D1DeviceContext3 *This,
        ID2D1ImageSource *source,
        const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,
        ID2D1TransformedImageSource **transformed);

    /*** ID2D1DeviceContext3 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSpriteBatch)(
        ID2D1DeviceContext3 *This,
        ID2D1SpriteBatch **sprite_batch);

    void (STDMETHODCALLTYPE *DrawSpriteBatch)(
        ID2D1DeviceContext3 *This,
        ID2D1SpriteBatch *sprite_batch,
        UINT32 start_index,
        UINT32 sprite_count,
        ID2D1Bitmap *bitmap,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        D2D1_SPRITE_OPTIONS sprite_options);

    END_INTERFACE
} ID2D1DeviceContext3Vtbl;

interface ID2D1DeviceContext3 {
    CONST_VTBL ID2D1DeviceContext3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DeviceContext3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DeviceContext3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DeviceContext3_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1DeviceContext3_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1RenderTarget methods ***/
#define ID2D1DeviceContext3_CreateSharedBitmap(This,iid,data,desc,bitmap) (This)->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap)
#define ID2D1DeviceContext3_CreateSolidColorBrush(This,color,desc,brush) (This)->lpVtbl->CreateSolidColorBrush(This,color,desc,brush)
#define ID2D1DeviceContext3_CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext3_CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext3_CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target) (This)->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target)
#define ID2D1DeviceContext3_CreateLayer(This,size,layer) (This)->lpVtbl->CreateLayer(This,size,layer)
#define ID2D1DeviceContext3_CreateMesh(This,mesh) (This)->lpVtbl->CreateMesh(This,mesh)
#define ID2D1DeviceContext3_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext3_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext3_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1DeviceContext3_DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext3_FillRoundedRectangle(This,rect,brush) (This)->lpVtbl->FillRoundedRectangle(This,rect,brush)
#define ID2D1DeviceContext3_DrawEllipse(This,ellipse,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext3_FillEllipse(This,ellipse,brush) (This)->lpVtbl->FillEllipse(This,ellipse,brush)
#define ID2D1DeviceContext3_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext3_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1DeviceContext3_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1DeviceContext3_DrawText(This,string,string_len,text_format,layout_rect,brush,options,measuring_mode) (This)->lpVtbl->DrawText(This,string,string_len,text_format,layout_rect,brush,options,measuring_mode)
#define ID2D1DeviceContext3_DrawTextLayout(This,origin,layout,brush,options) (This)->lpVtbl->DrawTextLayout(This,origin,layout,brush,options)
#define ID2D1DeviceContext3_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1DeviceContext3_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#define ID2D1DeviceContext3_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext3_GetAntialiasMode(This) (This)->lpVtbl->GetAntialiasMode(This)
#define ID2D1DeviceContext3_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext3_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
#define ID2D1DeviceContext3_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext3_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext3_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1DeviceContext3_GetTags(This,tag1,tag2) (This)->lpVtbl->GetTags(This,tag1,tag2)
#define ID2D1DeviceContext3_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#define ID2D1DeviceContext3_Flush(This,tag1,tag2) (This)->lpVtbl->Flush(This,tag1,tag2)
#define ID2D1DeviceContext3_SaveDrawingState(This,state_block) (This)->lpVtbl->SaveDrawingState(This,state_block)
#define ID2D1DeviceContext3_RestoreDrawingState(This,state_block) (This)->lpVtbl->RestoreDrawingState(This,state_block)
#define ID2D1DeviceContext3_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1DeviceContext3_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1DeviceContext3_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1DeviceContext3_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1DeviceContext3_EndDraw(This,tag1,tag2) (This)->lpVtbl->EndDraw(This,tag1,tag2)
#define ID2D1DeviceContext3_GetPixelFormat(This) ID2D1DeviceContext3_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext3_SetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->SetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext3_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext3_GetSize(This) ID2D1DeviceContext3_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext3_GetPixelSize(This) ID2D1DeviceContext3_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext3_GetMaximumBitmapSize(This) (This)->lpVtbl->GetMaximumBitmapSize(This)
#define ID2D1DeviceContext3_IsSupported(This,desc) (This)->lpVtbl->IsSupported(This,desc)
/*** ID2D1DeviceContext methods ***/
#define ID2D1DeviceContext3_CreateBitmap(This,size,src_data,pitch,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap)
#define ID2D1DeviceContext3_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap)
#define ID2D1DeviceContext3_CreateColorContext(This,space,profile,profile_size,color_context) (This)->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context)
#define ID2D1DeviceContext3_CreateColorContextFromFilename(This,filename,color_context) (This)->lpVtbl->CreateColorContextFromFilename(This,filename,color_context)
#define ID2D1DeviceContext3_CreateColorContextFromWicColorContext(This,wic_color_context,color_context) (This)->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context)
#define ID2D1DeviceContext3_CreateBitmapFromDxgiSurface(This,surface,desc,bitmap) (This)->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap)
#define ID2D1DeviceContext3_CreateEffect(This,effect_id,effect) (This)->lpVtbl->CreateEffect(This,effect_id,effect)
#define ID2D1DeviceContext3_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient) (This)->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient)
#define ID2D1DeviceContext3_CreateImageBrush(This,image,image_brush_desc,brush_desc,brush) (This)->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush)
#define ID2D1DeviceContext3_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush)
#define ID2D1DeviceContext3_CreateCommandList(This,command_list) (This)->lpVtbl->CreateCommandList(This,command_list)
#define ID2D1DeviceContext3_IsDxgiFormatSupported(This,format) (This)->lpVtbl->IsDxgiFormatSupported(This,format)
#define ID2D1DeviceContext3_IsBufferPrecisionSupported(This,buffer_precision) (This)->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision)
#define ID2D1DeviceContext3_GetImageLocalBounds(This,image,local_bounds) (This)->lpVtbl->GetImageLocalBounds(This,image,local_bounds)
#define ID2D1DeviceContext3_GetImageWorldBounds(This,image,world_bounds) (This)->lpVtbl->GetImageWorldBounds(This,image,world_bounds)
#define ID2D1DeviceContext3_GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds) (This)->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds)
#define ID2D1DeviceContext3_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define ID2D1DeviceContext3_SetTarget(This,target) (This)->lpVtbl->SetTarget(This,target)
#define ID2D1DeviceContext3_GetTarget(This,target) (This)->lpVtbl->GetTarget(This,target)
#define ID2D1DeviceContext3_SetRenderingControls(This,rendering_controls) (This)->lpVtbl->SetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext3_GetRenderingControls(This,rendering_controls) (This)->lpVtbl->GetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext3_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1DeviceContext3_GetPrimitiveBlend(This) (This)->lpVtbl->GetPrimitiveBlend(This)
#define ID2D1DeviceContext3_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1DeviceContext3_GetUnitMode(This) (This)->lpVtbl->GetUnitMode(This)
#define ID2D1DeviceContext3_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode) (This)->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode)
#define ID2D1DeviceContext3_DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode) (This)->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode)
#define ID2D1DeviceContext3_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform) (This)->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform)
#define ID2D1DeviceContext3_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer)
#define ID2D1DeviceContext3_InvalidateEffectInputRectangle(This,effect,input,input_rect) (This)->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect)
#define ID2D1DeviceContext3_GetEffectInvalidRectangleCount(This,effect,rect_count) (This)->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count)
#define ID2D1DeviceContext3_GetEffectInvalidRectangles(This,effect,rectangles,rect_count) (This)->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count)
#define ID2D1DeviceContext3_GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count) (This)->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count)
#define ID2D1DeviceContext3_FillOpacityMask(This,mask,brush,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect)
/*** ID2D1DeviceContext1 methods ***/
#define ID2D1DeviceContext3_CreateFilledGeometryRealization(This,geometry,tolerance,realization) (This)->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization)
#define ID2D1DeviceContext3_CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization) (This)->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization)
#define ID2D1DeviceContext3_DrawGeometryRealization(This,realization,brush) (This)->lpVtbl->DrawGeometryRealization(This,realization,brush)
/*** ID2D1DeviceContext2 methods ***/
#define ID2D1DeviceContext3_CreateInk(This,start_point,ink) (This)->lpVtbl->CreateInk(This,start_point,ink)
#define ID2D1DeviceContext3_CreateInkStyle(This,ink_style_properties,ink_style) (This)->lpVtbl->CreateInkStyle(This,ink_style_properties,ink_style)
#define ID2D1DeviceContext3_CreateGradientMesh(This,patches,patches_count,gradient_mesh) (This)->lpVtbl->CreateGradientMesh(This,patches,patches_count,gradient_mesh)
#define ID2D1DeviceContext3_CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source) (This)->lpVtbl->CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source)
#define ID2D1DeviceContext3_CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table) (This)->lpVtbl->CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table)
#define ID2D1DeviceContext3_CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source) (This)->lpVtbl->CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source)
#define ID2D1DeviceContext3_GetGradientMeshWorldBounds(This,gradient_mesh,bounds) (This)->lpVtbl->GetGradientMeshWorldBounds(This,gradient_mesh,bounds)
#define ID2D1DeviceContext3_DrawInk(This,ink,brush,ink_style) (This)->lpVtbl->DrawInk(This,ink,brush,ink_style)
#define ID2D1DeviceContext3_DrawGradientMesh(This,gradient_mesh) (This)->lpVtbl->DrawGradientMesh(This,gradient_mesh)
#define ID2D1DeviceContext3_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect)
#define ID2D1DeviceContext3_CreateTransformedImageSource(This,source,props,transformed) (This)->lpVtbl->CreateTransformedImageSource(This,source,props,transformed)
/*** ID2D1DeviceContext3 methods ***/
#define ID2D1DeviceContext3_CreateSpriteBatch(This,sprite_batch) (This)->lpVtbl->CreateSpriteBatch(This,sprite_batch)
#define ID2D1DeviceContext3_DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options) (This)->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1DeviceContext3_QueryInterface(ID2D1DeviceContext3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1DeviceContext3_AddRef(ID2D1DeviceContext3* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1DeviceContext3_Release(ID2D1DeviceContext3* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1DeviceContext3_GetFactory(ID2D1DeviceContext3* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1RenderTarget methods ***/
static inline HRESULT ID2D1DeviceContext3_CreateSharedBitmap(ID2D1DeviceContext3* This,REFIID iid,void *data,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext3_CreateSolidColorBrush(ID2D1DeviceContext3* This,const D2D1_COLOR_F *color,const D2D1_BRUSH_PROPERTIES *desc,ID2D1SolidColorBrush **brush) {
    return This->lpVtbl->CreateSolidColorBrush(This,color,desc,brush);
}
static inline HRESULT ID2D1DeviceContext3_CreateLinearGradientBrush(ID2D1DeviceContext3* This,const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1LinearGradientBrush **brush) {
    return This->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext3_CreateRadialGradientBrush(ID2D1DeviceContext3* This,const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1RadialGradientBrush **brush) {
    return This->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext3_CreateCompatibleRenderTarget(ID2D1DeviceContext3* This,const D2D1_SIZE_F *size,const D2D1_SIZE_U *pixel_size,const D2D1_PIXEL_FORMAT *format,D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,ID2D1BitmapRenderTarget **render_target) {
    return This->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target);
}
static inline HRESULT ID2D1DeviceContext3_CreateLayer(ID2D1DeviceContext3* This,const D2D1_SIZE_F *size,ID2D1Layer **layer) {
    return This->lpVtbl->CreateLayer(This,size,layer);
}
static inline HRESULT ID2D1DeviceContext3_CreateMesh(ID2D1DeviceContext3* This,ID2D1Mesh **mesh) {
    return This->lpVtbl->CreateMesh(This,mesh);
}
static inline void ID2D1DeviceContext3_DrawLine(ID2D1DeviceContext3* This,D2D1_POINT_2F p0,D2D1_POINT_2F p1,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext3_DrawRectangle(ID2D1DeviceContext3* This,const D2D1_RECT_F *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext3_FillRectangle(ID2D1DeviceContext3* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext3_DrawRoundedRectangle(ID2D1DeviceContext3* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext3_FillRoundedRectangle(ID2D1DeviceContext3* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRoundedRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext3_DrawEllipse(ID2D1DeviceContext3* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext3_FillEllipse(ID2D1DeviceContext3* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush) {
    This->lpVtbl->FillEllipse(This,ellipse,brush);
}
static inline void ID2D1DeviceContext3_DrawGeometry(ID2D1DeviceContext3* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext3_FillGeometry(ID2D1DeviceContext3* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline void ID2D1DeviceContext3_FillMesh(ID2D1DeviceContext3* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline void ID2D1DeviceContext3_DrawText(ID2D1DeviceContext3* This,const WCHAR *string,UINT32 string_len,IDWriteTextFormat *text_format,const D2D1_RECT_F *layout_rect,ID2D1Brush *brush,D2D1_DRAW_TEXT_OPTIONS options,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->DrawText(This,string,string_len,text_format,layout_rect,brush,options,measuring_mode);
}
static inline void ID2D1DeviceContext3_DrawTextLayout(ID2D1DeviceContext3* This,D2D1_POINT_2F origin,IDWriteTextLayout *layout,ID2D1Brush *brush,D2D1_DRAW_TEXT_OPTIONS options) {
    This->lpVtbl->DrawTextLayout(This,origin,layout,brush,options);
}
static inline void ID2D1DeviceContext3_SetTransform(ID2D1DeviceContext3* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static inline void ID2D1DeviceContext3_GetTransform(ID2D1DeviceContext3* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
static inline void ID2D1DeviceContext3_SetAntialiasMode(ID2D1DeviceContext3* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline D2D1_ANTIALIAS_MODE ID2D1DeviceContext3_GetAntialiasMode(ID2D1DeviceContext3* This) {
    return This->lpVtbl->GetAntialiasMode(This);
}
static inline void ID2D1DeviceContext3_SetTextAntialiasMode(ID2D1DeviceContext3* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline D2D1_TEXT_ANTIALIAS_MODE ID2D1DeviceContext3_GetTextAntialiasMode(ID2D1DeviceContext3* This) {
    return This->lpVtbl->GetTextAntialiasMode(This);
}
static inline void ID2D1DeviceContext3_SetTextRenderingParams(ID2D1DeviceContext3* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext3_GetTextRenderingParams(ID2D1DeviceContext3* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext3_SetTags(ID2D1DeviceContext3* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext3_GetTags(ID2D1DeviceContext3* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    This->lpVtbl->GetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext3_PopLayer(ID2D1DeviceContext3* This) {
    This->lpVtbl->PopLayer(This);
}
static inline HRESULT ID2D1DeviceContext3_Flush(ID2D1DeviceContext3* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->Flush(This,tag1,tag2);
}
static inline void ID2D1DeviceContext3_SaveDrawingState(ID2D1DeviceContext3* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->SaveDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext3_RestoreDrawingState(ID2D1DeviceContext3* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->RestoreDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext3_PushAxisAlignedClip(ID2D1DeviceContext3* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline void ID2D1DeviceContext3_PopAxisAlignedClip(ID2D1DeviceContext3* This) {
    This->lpVtbl->PopAxisAlignedClip(This);
}
static inline void ID2D1DeviceContext3_Clear(ID2D1DeviceContext3* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->Clear(This,color);
}
static inline void ID2D1DeviceContext3_BeginDraw(ID2D1DeviceContext3* This) {
    This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1DeviceContext3_EndDraw(ID2D1DeviceContext3* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->EndDraw(This,tag1,tag2);
}
static inline D2D1_PIXEL_FORMAT ID2D1DeviceContext3_GetPixelFormat(ID2D1DeviceContext3* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static inline void ID2D1DeviceContext3_SetDpi(ID2D1DeviceContext3* This,float dpi_x,float dpi_y) {
    This->lpVtbl->SetDpi(This,dpi_x,dpi_y);
}
static inline void ID2D1DeviceContext3_GetDpi(ID2D1DeviceContext3* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static inline D2D1_SIZE_F ID2D1DeviceContext3_GetSize(ID2D1DeviceContext3* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static inline D2D1_SIZE_U ID2D1DeviceContext3_GetPixelSize(ID2D1DeviceContext3* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static inline UINT32 ID2D1DeviceContext3_GetMaximumBitmapSize(ID2D1DeviceContext3* This) {
    return This->lpVtbl->GetMaximumBitmapSize(This);
}
static inline BOOL ID2D1DeviceContext3_IsSupported(ID2D1DeviceContext3* This,const D2D1_RENDER_TARGET_PROPERTIES *desc) {
    return This->lpVtbl->IsSupported(This,desc);
}
/*** ID2D1DeviceContext methods ***/
static inline HRESULT ID2D1DeviceContext3_CreateBitmap(ID2D1DeviceContext3* This,D2D1_SIZE_U size,const void *src_data,UINT32 pitch,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext3_CreateBitmapFromWicBitmap(ID2D1DeviceContext3* This,IWICBitmapSource *bitmap_source,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext3_CreateColorContext(ID2D1DeviceContext3* This,D2D1_COLOR_SPACE space,const BYTE *profile,UINT32 profile_size,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context);
}
static inline HRESULT ID2D1DeviceContext3_CreateColorContextFromFilename(ID2D1DeviceContext3* This,const WCHAR *filename,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromFilename(This,filename,color_context);
}
static inline HRESULT ID2D1DeviceContext3_CreateColorContextFromWicColorContext(ID2D1DeviceContext3* This,IWICColorContext *wic_color_context,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context);
}
static inline HRESULT ID2D1DeviceContext3_CreateBitmapFromDxgiSurface(ID2D1DeviceContext3* This,IDXGISurface *surface,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext3_CreateEffect(ID2D1DeviceContext3* This,REFCLSID effect_id,ID2D1Effect **effect) {
    return This->lpVtbl->CreateEffect(This,effect_id,effect);
}
static inline HRESULT ID2D1DeviceContext3_CreateGradientStopCollection(ID2D1DeviceContext3* This,const D2D1_GRADIENT_STOP *stops,UINT32 stop_count,D2D1_COLOR_SPACE preinterpolation_space,D2D1_COLOR_SPACE postinterpolation_space,D2D1_BUFFER_PRECISION buffer_precision,D2D1_EXTEND_MODE extend_mode,D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,ID2D1GradientStopCollection1 **gradient) {
    return This->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient);
}
static inline HRESULT ID2D1DeviceContext3_CreateImageBrush(ID2D1DeviceContext3* This,ID2D1Image *image,const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1ImageBrush **brush) {
    return This->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush);
}
static inline HRESULT ID2D1DeviceContext3_CreateBitmapBrush(ID2D1DeviceContext3* This,ID2D1Bitmap *bitmap,const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1BitmapBrush1 **bitmap_brush) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush);
}
static inline HRESULT ID2D1DeviceContext3_CreateCommandList(ID2D1DeviceContext3* This,ID2D1CommandList **command_list) {
    return This->lpVtbl->CreateCommandList(This,command_list);
}
static inline BOOL ID2D1DeviceContext3_IsDxgiFormatSupported(ID2D1DeviceContext3* This,DXGI_FORMAT format) {
    return This->lpVtbl->IsDxgiFormatSupported(This,format);
}
static inline BOOL ID2D1DeviceContext3_IsBufferPrecisionSupported(ID2D1DeviceContext3* This,D2D1_BUFFER_PRECISION buffer_precision) {
    return This->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision);
}
static inline HRESULT ID2D1DeviceContext3_GetImageLocalBounds(ID2D1DeviceContext3* This,ID2D1Image *image,D2D1_RECT_F *local_bounds) {
    return This->lpVtbl->GetImageLocalBounds(This,image,local_bounds);
}
static inline HRESULT ID2D1DeviceContext3_GetImageWorldBounds(ID2D1DeviceContext3* This,ID2D1Image *image,D2D1_RECT_F *world_bounds) {
    return This->lpVtbl->GetImageWorldBounds(This,image,world_bounds);
}
static inline HRESULT ID2D1DeviceContext3_GetGlyphRunWorldBounds(ID2D1DeviceContext3* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,DWRITE_MEASURING_MODE measuring_mode,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds);
}
static inline void ID2D1DeviceContext3_GetDevice(ID2D1DeviceContext3* This,ID2D1Device **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline void ID2D1DeviceContext3_SetTarget(ID2D1DeviceContext3* This,ID2D1Image *target) {
    This->lpVtbl->SetTarget(This,target);
}
static inline void ID2D1DeviceContext3_GetTarget(ID2D1DeviceContext3* This,ID2D1Image **target) {
    This->lpVtbl->GetTarget(This,target);
}
static inline void ID2D1DeviceContext3_SetRenderingControls(ID2D1DeviceContext3* This,const D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->SetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext3_GetRenderingControls(ID2D1DeviceContext3* This,D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->GetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext3_SetPrimitiveBlend(ID2D1DeviceContext3* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline D2D1_PRIMITIVE_BLEND ID2D1DeviceContext3_GetPrimitiveBlend(ID2D1DeviceContext3* This) {
    return This->lpVtbl->GetPrimitiveBlend(This);
}
static inline void ID2D1DeviceContext3_SetUnitMode(ID2D1DeviceContext3* This,D2D1_UNIT_MODE unit_mode) {
    This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline D2D1_UNIT_MODE ID2D1DeviceContext3_GetUnitMode(ID2D1DeviceContext3* This) {
    return This->lpVtbl->GetUnitMode(This);
}
static inline void ID2D1DeviceContext3_DrawGlyphRun(ID2D1DeviceContext3* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode);
}
static inline void ID2D1DeviceContext3_DrawImage(ID2D1DeviceContext3* This,ID2D1Image *image,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode,D2D1_COMPOSITE_MODE composite_mode) {
    This->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode);
}
static inline void ID2D1DeviceContext3_DrawBitmap(ID2D1DeviceContext3* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect,const D2D1_MATRIX_4X4_F *perspective_transform) {
    This->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform);
}
static inline void ID2D1DeviceContext3_PushLayer(ID2D1DeviceContext3* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    This->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1DeviceContext3_InvalidateEffectInputRectangle(ID2D1DeviceContext3* This,ID2D1Effect *effect,UINT32 input,const D2D1_RECT_F *input_rect) {
    return This->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect);
}
static inline HRESULT ID2D1DeviceContext3_GetEffectInvalidRectangleCount(ID2D1DeviceContext3* This,ID2D1Effect *effect,UINT32 *rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count);
}
static inline HRESULT ID2D1DeviceContext3_GetEffectInvalidRectangles(ID2D1DeviceContext3* This,ID2D1Effect *effect,D2D1_RECT_F *rectangles,UINT32 rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count);
}
static inline HRESULT ID2D1DeviceContext3_GetEffectRequiredInputRectangles(ID2D1DeviceContext3* This,ID2D1Effect *effect,const D2D1_RECT_F *image_rect,const D2D1_EFFECT_INPUT_DESCRIPTION *desc,D2D1_RECT_F *input_rect,UINT32 input_count) {
    return This->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count);
}
static inline void ID2D1DeviceContext3_FillOpacityMask(ID2D1DeviceContext3* This,ID2D1Bitmap *mask,ID2D1Brush *brush,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect);
}
/*** ID2D1DeviceContext1 methods ***/
static inline HRESULT ID2D1DeviceContext3_CreateFilledGeometryRealization(ID2D1DeviceContext3* This,ID2D1Geometry *geometry,float tolerance,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization);
}
static inline HRESULT ID2D1DeviceContext3_CreateStrokedGeometryRealization(ID2D1DeviceContext3* This,ID2D1Geometry *geometry,float tolerance,float stroke_width,ID2D1StrokeStyle *stroke_style,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization);
}
static inline void ID2D1DeviceContext3_DrawGeometryRealization(ID2D1DeviceContext3* This,ID2D1GeometryRealization *realization,ID2D1Brush *brush) {
    This->lpVtbl->DrawGeometryRealization(This,realization,brush);
}
/*** ID2D1DeviceContext2 methods ***/
static inline HRESULT ID2D1DeviceContext3_CreateInk(ID2D1DeviceContext3* This,const D2D1_INK_POINT *start_point,ID2D1Ink **ink) {
    return This->lpVtbl->CreateInk(This,start_point,ink);
}
static inline HRESULT ID2D1DeviceContext3_CreateInkStyle(ID2D1DeviceContext3* This,const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,ID2D1InkStyle **ink_style) {
    return This->lpVtbl->CreateInkStyle(This,ink_style_properties,ink_style);
}
static inline HRESULT ID2D1DeviceContext3_CreateGradientMesh(ID2D1DeviceContext3* This,const D2D1_GRADIENT_MESH_PATCH *patches,UINT32 patches_count,ID2D1GradientMesh **gradient_mesh) {
    return This->lpVtbl->CreateGradientMesh(This,patches,patches_count,gradient_mesh);
}
static inline HRESULT ID2D1DeviceContext3_CreateImageSourceFromWic(ID2D1DeviceContext3* This,IWICBitmapSource *wic_bitmap_source,D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,D2D1_ALPHA_MODE alpha_mode,ID2D1ImageSourceFromWic **image_source) {
    return This->lpVtbl->CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source);
}
static inline HRESULT ID2D1DeviceContext3_CreateLookupTable3D(ID2D1DeviceContext3* This,D2D1_BUFFER_PRECISION precision,const UINT32 *extents,const BYTE *data,UINT32 data_count,const UINT32 *strides,ID2D1LookupTable3D **lookup_table) {
    return This->lpVtbl->CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table);
}
static inline HRESULT ID2D1DeviceContext3_CreateImageSourceFromDxgi(ID2D1DeviceContext3* This,IDXGISurface **surfaces,UINT32 surface_count,DXGI_COLOR_SPACE_TYPE color_space,D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,ID2D1ImageSource **image_source) {
    return This->lpVtbl->CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source);
}
static inline HRESULT ID2D1DeviceContext3_GetGradientMeshWorldBounds(ID2D1DeviceContext3* This,ID2D1GradientMesh *gradient_mesh,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGradientMeshWorldBounds(This,gradient_mesh,bounds);
}
static inline void ID2D1DeviceContext3_DrawInk(ID2D1DeviceContext3* This,ID2D1Ink *ink,ID2D1Brush *brush,ID2D1InkStyle *ink_style) {
    This->lpVtbl->DrawInk(This,ink,brush,ink_style);
}
static inline void ID2D1DeviceContext3_DrawGradientMesh(ID2D1DeviceContext3* This,ID2D1GradientMesh *gradient_mesh) {
    This->lpVtbl->DrawGradientMesh(This,gradient_mesh);
}
static inline void ID2D1DeviceContext3_DrawGdiMetafile(ID2D1DeviceContext3* This,ID2D1GdiMetafile *gdi_metafile,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect);
}
static inline HRESULT ID2D1DeviceContext3_CreateTransformedImageSource(ID2D1DeviceContext3* This,ID2D1ImageSource *source,const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,ID2D1TransformedImageSource **transformed) {
    return This->lpVtbl->CreateTransformedImageSource(This,source,props,transformed);
}
/*** ID2D1DeviceContext3 methods ***/
static inline HRESULT ID2D1DeviceContext3_CreateSpriteBatch(ID2D1DeviceContext3* This,ID2D1SpriteBatch **sprite_batch) {
    return This->lpVtbl->CreateSpriteBatch(This,sprite_batch);
}
static inline void ID2D1DeviceContext3_DrawSpriteBatch(ID2D1DeviceContext3* This,ID2D1SpriteBatch *sprite_batch,UINT32 start_index,UINT32 sprite_count,ID2D1Bitmap *bitmap,D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,D2D1_SPRITE_OPTIONS sprite_options) {
    This->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options);
}
#endif
#endif

#endif


#endif  /* __ID2D1DeviceContext3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1DeviceContext4 interface
 */
#ifndef __ID2D1DeviceContext4_INTERFACE_DEFINED__
#define __ID2D1DeviceContext4_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DeviceContext4, 0x8c427831, 0x3d90, 0x4476, 0xb6,0x47, 0xc4,0xfa,0xe3,0x49,0xe4,0xdb);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8c427831-3d90-4476-b647-c4fae349e4db")
ID2D1DeviceContext4 : public ID2D1DeviceContext3
{
    virtual HRESULT STDMETHODCALLTYPE CreateSvgGlyphStyle(
        ID2D1SvgGlyphStyle **svg_glyph_style) = 0;

    virtual void STDMETHODCALLTYPE DrawText(
        const WCHAR *string,
        UINT32 string_length,
        IDWriteTextFormat *text_format,
        const D2D1_RECT_F *layout_rect,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_DRAW_TEXT_OPTIONS options,
        DWRITE_MEASURING_MODE measuring_mode) = 0;

    virtual void STDMETHODCALLTYPE DrawTextLayout(
        D2D1_POINT_2F origin,
        IDWriteTextLayout *text_layout,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_DRAW_TEXT_OPTIONS options) = 0;

    virtual void STDMETHODCALLTYPE DrawColorBitmapGlyphRun(
        DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION bitmap_snap_option) = 0;

    virtual void STDMETHODCALLTYPE DrawSvgGlyphRun(
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        DWRITE_MEASURING_MODE measuring_mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetColorBitmapGlyphImage(
        DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,
        D2D1_POINT_2F glyph_origin,
        IDWriteFontFace *font_face,
        FLOAT font_em_size,
        UINT16 glyph_index,
        BOOL is_sideways,
        const D2D1_MATRIX_3X2_F *world_transform,
        FLOAT dpi_x,
        FLOAT dpi_y,
        D2D1_MATRIX_3X2_F *glyph_transform,
        ID2D1Image **glyph_image) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSvgGlyphImage(
        D2D1_POINT_2F glyph_origin,
        IDWriteFontFace *font_face,
        FLOAT font_em_size,
        UINT16 glyph_index,
        BOOL is_sideways,
        const D2D1_MATRIX_3X2_F *world_transform,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_MATRIX_3X2_F *glyph_transform,
        ID2D1CommandList **glyph_image) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DeviceContext4, 0x8c427831, 0x3d90, 0x4476, 0xb6,0x47, 0xc4,0xfa,0xe3,0x49,0xe4,0xdb)
#endif
#else
typedef struct ID2D1DeviceContext4Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1DeviceContext4 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1DeviceContext4 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1DeviceContext4 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1DeviceContext4 *This,
        ID2D1Factory **factory);

    /*** ID2D1RenderTarget methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateBitmap)(
        ID2D1DeviceContext4 *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext4 *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateSharedBitmap)(
        ID2D1DeviceContext4 *This,
        REFIID iid,
        void *data,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapBrush)(
        ID2D1DeviceContext4 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateSolidColorBrush)(
        ID2D1DeviceContext4 *This,
        const D2D1_COLOR_F *color,
        const D2D1_BRUSH_PROPERTIES *desc,
        ID2D1SolidColorBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateGradientStopCollection)(
        ID2D1DeviceContext4 *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_GAMMA gamma,
        D2D1_EXTEND_MODE extend_mode,
        ID2D1GradientStopCollection **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateLinearGradientBrush)(
        ID2D1DeviceContext4 *This,
        const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1LinearGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateRadialGradientBrush)(
        ID2D1DeviceContext4 *This,
        const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1RadialGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateCompatibleRenderTarget)(
        ID2D1DeviceContext4 *This,
        const D2D1_SIZE_F *size,
        const D2D1_SIZE_U *pixel_size,
        const D2D1_PIXEL_FORMAT *format,
        D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,
        ID2D1BitmapRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateLayer)(
        ID2D1DeviceContext4 *This,
        const D2D1_SIZE_F *size,
        ID2D1Layer **layer);

    HRESULT (STDMETHODCALLTYPE *CreateMesh)(
        ID2D1DeviceContext4 *This,
        ID2D1Mesh **mesh);

    void (STDMETHODCALLTYPE *DrawLine)(
        ID2D1DeviceContext4 *This,
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *DrawRectangle)(
        ID2D1DeviceContext4 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRectangle)(
        ID2D1DeviceContext4 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawRoundedRectangle)(
        ID2D1DeviceContext4 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRoundedRectangle)(
        ID2D1DeviceContext4 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawEllipse)(
        ID2D1DeviceContext4 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillEllipse)(
        ID2D1DeviceContext4 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawGeometry)(
        ID2D1DeviceContext4 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillGeometry)(
        ID2D1DeviceContext4 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        ID2D1Brush *opacity_brush);

    void (STDMETHODCALLTYPE *FillMesh)(
        ID2D1DeviceContext4 *This,
        ID2D1Mesh *mesh,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *FillOpacityMask)(
        ID2D1DeviceContext4 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        D2D1_OPACITY_MASK_CONTENT content,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawBitmap)(
        ID2D1DeviceContext4 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawText)(
        ID2D1DeviceContext4 *This,
        const WCHAR *string,
        UINT32 string_len,
        IDWriteTextFormat *text_format,
        const D2D1_RECT_F *layout_rect,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawTextLayout)(
        ID2D1DeviceContext4 *This,
        D2D1_POINT_2F origin,
        IDWriteTextLayout *layout,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options);

    void (STDMETHODCALLTYPE *DrawGlyphRun)(
        ID2D1DeviceContext4 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *SetTransform)(
        ID2D1DeviceContext4 *This,
        const D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *GetTransform)(
        ID2D1DeviceContext4 *This,
        D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *SetAntialiasMode)(
        ID2D1DeviceContext4 *This,
        D2D1_ANTIALIAS_MODE antialias_mode);

    D2D1_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetAntialiasMode)(
        ID2D1DeviceContext4 *This);

    void (STDMETHODCALLTYPE *SetTextAntialiasMode)(
        ID2D1DeviceContext4 *This,
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode);

    D2D1_TEXT_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetTextAntialiasMode)(
        ID2D1DeviceContext4 *This);

    void (STDMETHODCALLTYPE *SetTextRenderingParams)(
        ID2D1DeviceContext4 *This,
        IDWriteRenderingParams *text_rendering_params);

    void (STDMETHODCALLTYPE *GetTextRenderingParams)(
        ID2D1DeviceContext4 *This,
        IDWriteRenderingParams **text_rendering_params);

    void (STDMETHODCALLTYPE *SetTags)(
        ID2D1DeviceContext4 *This,
        D2D1_TAG tag1,
        D2D1_TAG tag2);

    void (STDMETHODCALLTYPE *GetTags)(
        ID2D1DeviceContext4 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *PushLayer)(
        ID2D1DeviceContext4 *This,
        const D2D1_LAYER_PARAMETERS *layer_parameters,
        ID2D1Layer *layer);

    void (STDMETHODCALLTYPE *PopLayer)(
        ID2D1DeviceContext4 *This);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        ID2D1DeviceContext4 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *SaveDrawingState)(
        ID2D1DeviceContext4 *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *RestoreDrawingState)(
        ID2D1DeviceContext4 *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *PushAxisAlignedClip)(
        ID2D1DeviceContext4 *This,
        const D2D1_RECT_F *clip_rect,
        D2D1_ANTIALIAS_MODE antialias_mode);

    void (STDMETHODCALLTYPE *PopAxisAlignedClip)(
        ID2D1DeviceContext4 *This);

    void (STDMETHODCALLTYPE *Clear)(
        ID2D1DeviceContext4 *This,
        const D2D1_COLOR_F *color);

    void (STDMETHODCALLTYPE *BeginDraw)(
        ID2D1DeviceContext4 *This);

    HRESULT (STDMETHODCALLTYPE *EndDraw)(
        ID2D1DeviceContext4 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    D2D1_PIXEL_FORMAT * (STDMETHODCALLTYPE *GetPixelFormat)(
        ID2D1DeviceContext4 *This,
        D2D1_PIXEL_FORMAT *__ret);

    void (STDMETHODCALLTYPE *SetDpi)(
        ID2D1DeviceContext4 *This,
        float dpi_x,
        float dpi_y);

    void (STDMETHODCALLTYPE *GetDpi)(
        ID2D1DeviceContext4 *This,
        float *dpi_x,
        float *dpi_y);

    D2D1_SIZE_F * (STDMETHODCALLTYPE *GetSize)(
        ID2D1DeviceContext4 *This,
        D2D1_SIZE_F *__ret);

    D2D1_SIZE_U * (STDMETHODCALLTYPE *GetPixelSize)(
        ID2D1DeviceContext4 *This,
        D2D1_SIZE_U *__ret);

    UINT32 (STDMETHODCALLTYPE *GetMaximumBitmapSize)(
        ID2D1DeviceContext4 *This);

    BOOL (STDMETHODCALLTYPE *IsSupported)(
        ID2D1DeviceContext4 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc);

    /*** ID2D1DeviceContext methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmap)(
        ID2D1DeviceContext4 *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext4 *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateColorContext)(
        ID2D1DeviceContext4 *This,
        D2D1_COLOR_SPACE space,
        const BYTE *profile,
        UINT32 profile_size,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromFilename)(
        ID2D1DeviceContext4 *This,
        const WCHAR *filename,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromWicColorContext)(
        ID2D1DeviceContext4 *This,
        IWICColorContext *wic_color_context,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromDxgiSurface)(
        ID2D1DeviceContext4 *This,
        IDXGISurface *surface,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateEffect)(
        ID2D1DeviceContext4 *This,
        REFCLSID effect_id,
        ID2D1Effect **effect);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateGradientStopCollection)(
        ID2D1DeviceContext4 *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_COLOR_SPACE preinterpolation_space,
        D2D1_COLOR_SPACE postinterpolation_space,
        D2D1_BUFFER_PRECISION buffer_precision,
        D2D1_EXTEND_MODE extend_mode,
        D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,
        ID2D1GradientStopCollection1 **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateImageBrush)(
        ID2D1DeviceContext4 *This,
        ID2D1Image *image,
        const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1ImageBrush **brush);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapBrush)(
        ID2D1DeviceContext4 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush1 **bitmap_brush);

    HRESULT (STDMETHODCALLTYPE *CreateCommandList)(
        ID2D1DeviceContext4 *This,
        ID2D1CommandList **command_list);

    BOOL (STDMETHODCALLTYPE *IsDxgiFormatSupported)(
        ID2D1DeviceContext4 *This,
        DXGI_FORMAT format);

    BOOL (STDMETHODCALLTYPE *IsBufferPrecisionSupported)(
        ID2D1DeviceContext4 *This,
        D2D1_BUFFER_PRECISION buffer_precision);

    HRESULT (STDMETHODCALLTYPE *GetImageLocalBounds)(
        ID2D1DeviceContext4 *This,
        ID2D1Image *image,
        D2D1_RECT_F *local_bounds);

    HRESULT (STDMETHODCALLTYPE *GetImageWorldBounds)(
        ID2D1DeviceContext4 *This,
        ID2D1Image *image,
        D2D1_RECT_F *world_bounds);

    HRESULT (STDMETHODCALLTYPE *GetGlyphRunWorldBounds)(
        ID2D1DeviceContext4 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *GetDevice)(
        ID2D1DeviceContext4 *This,
        ID2D1Device **device);

    void (STDMETHODCALLTYPE *SetTarget)(
        ID2D1DeviceContext4 *This,
        ID2D1Image *target);

    void (STDMETHODCALLTYPE *GetTarget)(
        ID2D1DeviceContext4 *This,
        ID2D1Image **target);

    void (STDMETHODCALLTYPE *SetRenderingControls)(
        ID2D1DeviceContext4 *This,
        const D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *GetRenderingControls)(
        ID2D1DeviceContext4 *This,
        D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *SetPrimitiveBlend)(
        ID2D1DeviceContext4 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    D2D1_PRIMITIVE_BLEND (STDMETHODCALLTYPE *GetPrimitiveBlend)(
        ID2D1DeviceContext4 *This);

    void (STDMETHODCALLTYPE *SetUnitMode)(
        ID2D1DeviceContext4 *This,
        D2D1_UNIT_MODE unit_mode);

    D2D1_UNIT_MODE (STDMETHODCALLTYPE *GetUnitMode)(
        ID2D1DeviceContext4 *This);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawGlyphRun)(
        ID2D1DeviceContext4 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawImage)(
        ID2D1DeviceContext4 *This,
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode);

    void (STDMETHODCALLTYPE *DrawGdiMetafile)(
        ID2D1DeviceContext4 *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawBitmap)(
        ID2D1DeviceContext4 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_PushLayer)(
        ID2D1DeviceContext4 *This,
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer);

    HRESULT (STDMETHODCALLTYPE *InvalidateEffectInputRectangle)(
        ID2D1DeviceContext4 *This,
        ID2D1Effect *effect,
        UINT32 input,
        const D2D1_RECT_F *input_rect);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangleCount)(
        ID2D1DeviceContext4 *This,
        ID2D1Effect *effect,
        UINT32 *rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangles)(
        ID2D1DeviceContext4 *This,
        ID2D1Effect *effect,
        D2D1_RECT_F *rectangles,
        UINT32 rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectRequiredInputRectangles)(
        ID2D1DeviceContext4 *This,
        ID2D1Effect *effect,
        const D2D1_RECT_F *image_rect,
        const D2D1_EFFECT_INPUT_DESCRIPTION *desc,
        D2D1_RECT_F *input_rect,
        UINT32 input_count);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_FillOpacityMask)(
        ID2D1DeviceContext4 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    /*** ID2D1DeviceContext1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateFilledGeometryRealization)(
        ID2D1DeviceContext4 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        ID2D1GeometryRealization **realization);

    HRESULT (STDMETHODCALLTYPE *CreateStrokedGeometryRealization)(
        ID2D1DeviceContext4 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        ID2D1GeometryRealization **realization);

    void (STDMETHODCALLTYPE *DrawGeometryRealization)(
        ID2D1DeviceContext4 *This,
        ID2D1GeometryRealization *realization,
        ID2D1Brush *brush);

    /*** ID2D1DeviceContext2 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateInk)(
        ID2D1DeviceContext4 *This,
        const D2D1_INK_POINT *start_point,
        ID2D1Ink **ink);

    HRESULT (STDMETHODCALLTYPE *CreateInkStyle)(
        ID2D1DeviceContext4 *This,
        const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,
        ID2D1InkStyle **ink_style);

    HRESULT (STDMETHODCALLTYPE *CreateGradientMesh)(
        ID2D1DeviceContext4 *This,
        const D2D1_GRADIENT_MESH_PATCH *patches,
        UINT32 patches_count,
        ID2D1GradientMesh **gradient_mesh);

    HRESULT (STDMETHODCALLTYPE *CreateImageSourceFromWic)(
        ID2D1DeviceContext4 *This,
        IWICBitmapSource *wic_bitmap_source,
        D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,
        D2D1_ALPHA_MODE alpha_mode,
        ID2D1ImageSourceFromWic **image_source);

    HRESULT (STDMETHODCALLTYPE *CreateLookupTable3D)(
        ID2D1DeviceContext4 *This,
        D2D1_BUFFER_PRECISION precision,
        const UINT32 *extents,
        const BYTE *data,
        UINT32 data_count,
        const UINT32 *strides,
        ID2D1LookupTable3D **lookup_table);

    HRESULT (STDMETHODCALLTYPE *CreateImageSourceFromDxgi)(
        ID2D1DeviceContext4 *This,
        IDXGISurface **surfaces,
        UINT32 surface_count,
        DXGI_COLOR_SPACE_TYPE color_space,
        D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,
        ID2D1ImageSource **image_source);

    HRESULT (STDMETHODCALLTYPE *GetGradientMeshWorldBounds)(
        ID2D1DeviceContext4 *This,
        ID2D1GradientMesh *gradient_mesh,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *DrawInk)(
        ID2D1DeviceContext4 *This,
        ID2D1Ink *ink,
        ID2D1Brush *brush,
        ID2D1InkStyle *ink_style);

    void (STDMETHODCALLTYPE *DrawGradientMesh)(
        ID2D1DeviceContext4 *This,
        ID2D1GradientMesh *gradient_mesh);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext2_DrawGdiMetafile)(
        ID2D1DeviceContext4 *This,
        ID2D1GdiMetafile *gdi_metafile,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedImageSource)(
        ID2D1DeviceContext4 *This,
        ID2D1ImageSource *source,
        const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,
        ID2D1TransformedImageSource **transformed);

    /*** ID2D1DeviceContext3 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSpriteBatch)(
        ID2D1DeviceContext4 *This,
        ID2D1SpriteBatch **sprite_batch);

    void (STDMETHODCALLTYPE *DrawSpriteBatch)(
        ID2D1DeviceContext4 *This,
        ID2D1SpriteBatch *sprite_batch,
        UINT32 start_index,
        UINT32 sprite_count,
        ID2D1Bitmap *bitmap,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        D2D1_SPRITE_OPTIONS sprite_options);

    /*** ID2D1DeviceContext4 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSvgGlyphStyle)(
        ID2D1DeviceContext4 *This,
        ID2D1SvgGlyphStyle **svg_glyph_style);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext4_DrawText)(
        ID2D1DeviceContext4 *This,
        const WCHAR *string,
        UINT32 string_length,
        IDWriteTextFormat *text_format,
        const D2D1_RECT_F *layout_rect,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_DRAW_TEXT_OPTIONS options,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext4_DrawTextLayout)(
        ID2D1DeviceContext4 *This,
        D2D1_POINT_2F origin,
        IDWriteTextLayout *text_layout,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_DRAW_TEXT_OPTIONS options);

    void (STDMETHODCALLTYPE *DrawColorBitmapGlyphRun)(
        ID2D1DeviceContext4 *This,
        DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION bitmap_snap_option);

    void (STDMETHODCALLTYPE *DrawSvgGlyphRun)(
        ID2D1DeviceContext4 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        DWRITE_MEASURING_MODE measuring_mode);

    HRESULT (STDMETHODCALLTYPE *GetColorBitmapGlyphImage)(
        ID2D1DeviceContext4 *This,
        DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,
        D2D1_POINT_2F glyph_origin,
        IDWriteFontFace *font_face,
        FLOAT font_em_size,
        UINT16 glyph_index,
        BOOL is_sideways,
        const D2D1_MATRIX_3X2_F *world_transform,
        FLOAT dpi_x,
        FLOAT dpi_y,
        D2D1_MATRIX_3X2_F *glyph_transform,
        ID2D1Image **glyph_image);

    HRESULT (STDMETHODCALLTYPE *GetSvgGlyphImage)(
        ID2D1DeviceContext4 *This,
        D2D1_POINT_2F glyph_origin,
        IDWriteFontFace *font_face,
        FLOAT font_em_size,
        UINT16 glyph_index,
        BOOL is_sideways,
        const D2D1_MATRIX_3X2_F *world_transform,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_MATRIX_3X2_F *glyph_transform,
        ID2D1CommandList **glyph_image);

    END_INTERFACE
} ID2D1DeviceContext4Vtbl;

interface ID2D1DeviceContext4 {
    CONST_VTBL ID2D1DeviceContext4Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DeviceContext4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DeviceContext4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DeviceContext4_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1DeviceContext4_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1RenderTarget methods ***/
#define ID2D1DeviceContext4_CreateSharedBitmap(This,iid,data,desc,bitmap) (This)->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap)
#define ID2D1DeviceContext4_CreateSolidColorBrush(This,color,desc,brush) (This)->lpVtbl->CreateSolidColorBrush(This,color,desc,brush)
#define ID2D1DeviceContext4_CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext4_CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext4_CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target) (This)->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target)
#define ID2D1DeviceContext4_CreateLayer(This,size,layer) (This)->lpVtbl->CreateLayer(This,size,layer)
#define ID2D1DeviceContext4_CreateMesh(This,mesh) (This)->lpVtbl->CreateMesh(This,mesh)
#define ID2D1DeviceContext4_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext4_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext4_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1DeviceContext4_DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext4_FillRoundedRectangle(This,rect,brush) (This)->lpVtbl->FillRoundedRectangle(This,rect,brush)
#define ID2D1DeviceContext4_DrawEllipse(This,ellipse,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext4_FillEllipse(This,ellipse,brush) (This)->lpVtbl->FillEllipse(This,ellipse,brush)
#define ID2D1DeviceContext4_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext4_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1DeviceContext4_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1DeviceContext4_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1DeviceContext4_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#define ID2D1DeviceContext4_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext4_GetAntialiasMode(This) (This)->lpVtbl->GetAntialiasMode(This)
#define ID2D1DeviceContext4_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext4_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
#define ID2D1DeviceContext4_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext4_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext4_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1DeviceContext4_GetTags(This,tag1,tag2) (This)->lpVtbl->GetTags(This,tag1,tag2)
#define ID2D1DeviceContext4_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#define ID2D1DeviceContext4_Flush(This,tag1,tag2) (This)->lpVtbl->Flush(This,tag1,tag2)
#define ID2D1DeviceContext4_SaveDrawingState(This,state_block) (This)->lpVtbl->SaveDrawingState(This,state_block)
#define ID2D1DeviceContext4_RestoreDrawingState(This,state_block) (This)->lpVtbl->RestoreDrawingState(This,state_block)
#define ID2D1DeviceContext4_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1DeviceContext4_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1DeviceContext4_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1DeviceContext4_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1DeviceContext4_EndDraw(This,tag1,tag2) (This)->lpVtbl->EndDraw(This,tag1,tag2)
#define ID2D1DeviceContext4_GetPixelFormat(This) ID2D1DeviceContext4_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext4_SetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->SetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext4_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext4_GetSize(This) ID2D1DeviceContext4_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext4_GetPixelSize(This) ID2D1DeviceContext4_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext4_GetMaximumBitmapSize(This) (This)->lpVtbl->GetMaximumBitmapSize(This)
#define ID2D1DeviceContext4_IsSupported(This,desc) (This)->lpVtbl->IsSupported(This,desc)
/*** ID2D1DeviceContext methods ***/
#define ID2D1DeviceContext4_CreateBitmap(This,size,src_data,pitch,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap)
#define ID2D1DeviceContext4_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap)
#define ID2D1DeviceContext4_CreateColorContext(This,space,profile,profile_size,color_context) (This)->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context)
#define ID2D1DeviceContext4_CreateColorContextFromFilename(This,filename,color_context) (This)->lpVtbl->CreateColorContextFromFilename(This,filename,color_context)
#define ID2D1DeviceContext4_CreateColorContextFromWicColorContext(This,wic_color_context,color_context) (This)->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context)
#define ID2D1DeviceContext4_CreateBitmapFromDxgiSurface(This,surface,desc,bitmap) (This)->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap)
#define ID2D1DeviceContext4_CreateEffect(This,effect_id,effect) (This)->lpVtbl->CreateEffect(This,effect_id,effect)
#define ID2D1DeviceContext4_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient) (This)->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient)
#define ID2D1DeviceContext4_CreateImageBrush(This,image,image_brush_desc,brush_desc,brush) (This)->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush)
#define ID2D1DeviceContext4_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush)
#define ID2D1DeviceContext4_CreateCommandList(This,command_list) (This)->lpVtbl->CreateCommandList(This,command_list)
#define ID2D1DeviceContext4_IsDxgiFormatSupported(This,format) (This)->lpVtbl->IsDxgiFormatSupported(This,format)
#define ID2D1DeviceContext4_IsBufferPrecisionSupported(This,buffer_precision) (This)->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision)
#define ID2D1DeviceContext4_GetImageLocalBounds(This,image,local_bounds) (This)->lpVtbl->GetImageLocalBounds(This,image,local_bounds)
#define ID2D1DeviceContext4_GetImageWorldBounds(This,image,world_bounds) (This)->lpVtbl->GetImageWorldBounds(This,image,world_bounds)
#define ID2D1DeviceContext4_GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds) (This)->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds)
#define ID2D1DeviceContext4_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define ID2D1DeviceContext4_SetTarget(This,target) (This)->lpVtbl->SetTarget(This,target)
#define ID2D1DeviceContext4_GetTarget(This,target) (This)->lpVtbl->GetTarget(This,target)
#define ID2D1DeviceContext4_SetRenderingControls(This,rendering_controls) (This)->lpVtbl->SetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext4_GetRenderingControls(This,rendering_controls) (This)->lpVtbl->GetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext4_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1DeviceContext4_GetPrimitiveBlend(This) (This)->lpVtbl->GetPrimitiveBlend(This)
#define ID2D1DeviceContext4_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1DeviceContext4_GetUnitMode(This) (This)->lpVtbl->GetUnitMode(This)
#define ID2D1DeviceContext4_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode) (This)->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode)
#define ID2D1DeviceContext4_DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode) (This)->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode)
#define ID2D1DeviceContext4_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform) (This)->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform)
#define ID2D1DeviceContext4_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer)
#define ID2D1DeviceContext4_InvalidateEffectInputRectangle(This,effect,input,input_rect) (This)->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect)
#define ID2D1DeviceContext4_GetEffectInvalidRectangleCount(This,effect,rect_count) (This)->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count)
#define ID2D1DeviceContext4_GetEffectInvalidRectangles(This,effect,rectangles,rect_count) (This)->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count)
#define ID2D1DeviceContext4_GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count) (This)->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count)
#define ID2D1DeviceContext4_FillOpacityMask(This,mask,brush,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect)
/*** ID2D1DeviceContext1 methods ***/
#define ID2D1DeviceContext4_CreateFilledGeometryRealization(This,geometry,tolerance,realization) (This)->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization)
#define ID2D1DeviceContext4_CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization) (This)->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization)
#define ID2D1DeviceContext4_DrawGeometryRealization(This,realization,brush) (This)->lpVtbl->DrawGeometryRealization(This,realization,brush)
/*** ID2D1DeviceContext2 methods ***/
#define ID2D1DeviceContext4_CreateInk(This,start_point,ink) (This)->lpVtbl->CreateInk(This,start_point,ink)
#define ID2D1DeviceContext4_CreateInkStyle(This,ink_style_properties,ink_style) (This)->lpVtbl->CreateInkStyle(This,ink_style_properties,ink_style)
#define ID2D1DeviceContext4_CreateGradientMesh(This,patches,patches_count,gradient_mesh) (This)->lpVtbl->CreateGradientMesh(This,patches,patches_count,gradient_mesh)
#define ID2D1DeviceContext4_CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source) (This)->lpVtbl->CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source)
#define ID2D1DeviceContext4_CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table) (This)->lpVtbl->CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table)
#define ID2D1DeviceContext4_CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source) (This)->lpVtbl->CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source)
#define ID2D1DeviceContext4_GetGradientMeshWorldBounds(This,gradient_mesh,bounds) (This)->lpVtbl->GetGradientMeshWorldBounds(This,gradient_mesh,bounds)
#define ID2D1DeviceContext4_DrawInk(This,ink,brush,ink_style) (This)->lpVtbl->DrawInk(This,ink,brush,ink_style)
#define ID2D1DeviceContext4_DrawGradientMesh(This,gradient_mesh) (This)->lpVtbl->DrawGradientMesh(This,gradient_mesh)
#define ID2D1DeviceContext4_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect)
#define ID2D1DeviceContext4_CreateTransformedImageSource(This,source,props,transformed) (This)->lpVtbl->CreateTransformedImageSource(This,source,props,transformed)
/*** ID2D1DeviceContext3 methods ***/
#define ID2D1DeviceContext4_CreateSpriteBatch(This,sprite_batch) (This)->lpVtbl->CreateSpriteBatch(This,sprite_batch)
#define ID2D1DeviceContext4_DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options) (This)->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options)
/*** ID2D1DeviceContext4 methods ***/
#define ID2D1DeviceContext4_CreateSvgGlyphStyle(This,svg_glyph_style) (This)->lpVtbl->CreateSvgGlyphStyle(This,svg_glyph_style)
#define ID2D1DeviceContext4_DrawText(This,string,string_length,text_format,layout_rect,default_fill_brush,svg_glyph_style,color_palette_index,options,measuring_mode) (This)->lpVtbl->ID2D1DeviceContext4_DrawText(This,string,string_length,text_format,layout_rect,default_fill_brush,svg_glyph_style,color_palette_index,options,measuring_mode)
#define ID2D1DeviceContext4_DrawTextLayout(This,origin,text_layout,default_fill_brush,svg_glyph_style,color_palette_index,options) (This)->lpVtbl->ID2D1DeviceContext4_DrawTextLayout(This,origin,text_layout,default_fill_brush,svg_glyph_style,color_palette_index,options)
#define ID2D1DeviceContext4_DrawColorBitmapGlyphRun(This,glyph_image_format,baseline_origin,glyph_run,measuring_mode,bitmap_snap_option) (This)->lpVtbl->DrawColorBitmapGlyphRun(This,glyph_image_format,baseline_origin,glyph_run,measuring_mode,bitmap_snap_option)
#define ID2D1DeviceContext4_DrawSvgGlyphRun(This,baseline_origin,glyph_run,default_fill_brush,svg_glyph_style,color_palette_index,measuring_mode) (This)->lpVtbl->DrawSvgGlyphRun(This,baseline_origin,glyph_run,default_fill_brush,svg_glyph_style,color_palette_index,measuring_mode)
#define ID2D1DeviceContext4_GetColorBitmapGlyphImage(This,glyph_image_format,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,dpi_x,dpi_y,glyph_transform,glyph_image) (This)->lpVtbl->GetColorBitmapGlyphImage(This,glyph_image_format,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,dpi_x,dpi_y,glyph_transform,glyph_image)
#define ID2D1DeviceContext4_GetSvgGlyphImage(This,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,default_fill_brush,svg_glyph_style,color_palette_index,glyph_transform,glyph_image) (This)->lpVtbl->GetSvgGlyphImage(This,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,default_fill_brush,svg_glyph_style,color_palette_index,glyph_transform,glyph_image)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1DeviceContext4_QueryInterface(ID2D1DeviceContext4* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1DeviceContext4_AddRef(ID2D1DeviceContext4* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1DeviceContext4_Release(ID2D1DeviceContext4* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1DeviceContext4_GetFactory(ID2D1DeviceContext4* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1RenderTarget methods ***/
static inline HRESULT ID2D1DeviceContext4_CreateSharedBitmap(ID2D1DeviceContext4* This,REFIID iid,void *data,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext4_CreateSolidColorBrush(ID2D1DeviceContext4* This,const D2D1_COLOR_F *color,const D2D1_BRUSH_PROPERTIES *desc,ID2D1SolidColorBrush **brush) {
    return This->lpVtbl->CreateSolidColorBrush(This,color,desc,brush);
}
static inline HRESULT ID2D1DeviceContext4_CreateLinearGradientBrush(ID2D1DeviceContext4* This,const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1LinearGradientBrush **brush) {
    return This->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext4_CreateRadialGradientBrush(ID2D1DeviceContext4* This,const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1RadialGradientBrush **brush) {
    return This->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext4_CreateCompatibleRenderTarget(ID2D1DeviceContext4* This,const D2D1_SIZE_F *size,const D2D1_SIZE_U *pixel_size,const D2D1_PIXEL_FORMAT *format,D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,ID2D1BitmapRenderTarget **render_target) {
    return This->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target);
}
static inline HRESULT ID2D1DeviceContext4_CreateLayer(ID2D1DeviceContext4* This,const D2D1_SIZE_F *size,ID2D1Layer **layer) {
    return This->lpVtbl->CreateLayer(This,size,layer);
}
static inline HRESULT ID2D1DeviceContext4_CreateMesh(ID2D1DeviceContext4* This,ID2D1Mesh **mesh) {
    return This->lpVtbl->CreateMesh(This,mesh);
}
static inline void ID2D1DeviceContext4_DrawLine(ID2D1DeviceContext4* This,D2D1_POINT_2F p0,D2D1_POINT_2F p1,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext4_DrawRectangle(ID2D1DeviceContext4* This,const D2D1_RECT_F *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext4_FillRectangle(ID2D1DeviceContext4* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext4_DrawRoundedRectangle(ID2D1DeviceContext4* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext4_FillRoundedRectangle(ID2D1DeviceContext4* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRoundedRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext4_DrawEllipse(ID2D1DeviceContext4* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext4_FillEllipse(ID2D1DeviceContext4* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush) {
    This->lpVtbl->FillEllipse(This,ellipse,brush);
}
static inline void ID2D1DeviceContext4_DrawGeometry(ID2D1DeviceContext4* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext4_FillGeometry(ID2D1DeviceContext4* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline void ID2D1DeviceContext4_FillMesh(ID2D1DeviceContext4* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline void ID2D1DeviceContext4_SetTransform(ID2D1DeviceContext4* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static inline void ID2D1DeviceContext4_GetTransform(ID2D1DeviceContext4* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
static inline void ID2D1DeviceContext4_SetAntialiasMode(ID2D1DeviceContext4* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline D2D1_ANTIALIAS_MODE ID2D1DeviceContext4_GetAntialiasMode(ID2D1DeviceContext4* This) {
    return This->lpVtbl->GetAntialiasMode(This);
}
static inline void ID2D1DeviceContext4_SetTextAntialiasMode(ID2D1DeviceContext4* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline D2D1_TEXT_ANTIALIAS_MODE ID2D1DeviceContext4_GetTextAntialiasMode(ID2D1DeviceContext4* This) {
    return This->lpVtbl->GetTextAntialiasMode(This);
}
static inline void ID2D1DeviceContext4_SetTextRenderingParams(ID2D1DeviceContext4* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext4_GetTextRenderingParams(ID2D1DeviceContext4* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext4_SetTags(ID2D1DeviceContext4* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext4_GetTags(ID2D1DeviceContext4* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    This->lpVtbl->GetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext4_PopLayer(ID2D1DeviceContext4* This) {
    This->lpVtbl->PopLayer(This);
}
static inline HRESULT ID2D1DeviceContext4_Flush(ID2D1DeviceContext4* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->Flush(This,tag1,tag2);
}
static inline void ID2D1DeviceContext4_SaveDrawingState(ID2D1DeviceContext4* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->SaveDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext4_RestoreDrawingState(ID2D1DeviceContext4* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->RestoreDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext4_PushAxisAlignedClip(ID2D1DeviceContext4* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline void ID2D1DeviceContext4_PopAxisAlignedClip(ID2D1DeviceContext4* This) {
    This->lpVtbl->PopAxisAlignedClip(This);
}
static inline void ID2D1DeviceContext4_Clear(ID2D1DeviceContext4* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->Clear(This,color);
}
static inline void ID2D1DeviceContext4_BeginDraw(ID2D1DeviceContext4* This) {
    This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1DeviceContext4_EndDraw(ID2D1DeviceContext4* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->EndDraw(This,tag1,tag2);
}
static inline D2D1_PIXEL_FORMAT ID2D1DeviceContext4_GetPixelFormat(ID2D1DeviceContext4* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static inline void ID2D1DeviceContext4_SetDpi(ID2D1DeviceContext4* This,float dpi_x,float dpi_y) {
    This->lpVtbl->SetDpi(This,dpi_x,dpi_y);
}
static inline void ID2D1DeviceContext4_GetDpi(ID2D1DeviceContext4* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static inline D2D1_SIZE_F ID2D1DeviceContext4_GetSize(ID2D1DeviceContext4* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static inline D2D1_SIZE_U ID2D1DeviceContext4_GetPixelSize(ID2D1DeviceContext4* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static inline UINT32 ID2D1DeviceContext4_GetMaximumBitmapSize(ID2D1DeviceContext4* This) {
    return This->lpVtbl->GetMaximumBitmapSize(This);
}
static inline BOOL ID2D1DeviceContext4_IsSupported(ID2D1DeviceContext4* This,const D2D1_RENDER_TARGET_PROPERTIES *desc) {
    return This->lpVtbl->IsSupported(This,desc);
}
/*** ID2D1DeviceContext methods ***/
static inline HRESULT ID2D1DeviceContext4_CreateBitmap(ID2D1DeviceContext4* This,D2D1_SIZE_U size,const void *src_data,UINT32 pitch,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext4_CreateBitmapFromWicBitmap(ID2D1DeviceContext4* This,IWICBitmapSource *bitmap_source,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext4_CreateColorContext(ID2D1DeviceContext4* This,D2D1_COLOR_SPACE space,const BYTE *profile,UINT32 profile_size,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context);
}
static inline HRESULT ID2D1DeviceContext4_CreateColorContextFromFilename(ID2D1DeviceContext4* This,const WCHAR *filename,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromFilename(This,filename,color_context);
}
static inline HRESULT ID2D1DeviceContext4_CreateColorContextFromWicColorContext(ID2D1DeviceContext4* This,IWICColorContext *wic_color_context,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context);
}
static inline HRESULT ID2D1DeviceContext4_CreateBitmapFromDxgiSurface(ID2D1DeviceContext4* This,IDXGISurface *surface,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext4_CreateEffect(ID2D1DeviceContext4* This,REFCLSID effect_id,ID2D1Effect **effect) {
    return This->lpVtbl->CreateEffect(This,effect_id,effect);
}
static inline HRESULT ID2D1DeviceContext4_CreateGradientStopCollection(ID2D1DeviceContext4* This,const D2D1_GRADIENT_STOP *stops,UINT32 stop_count,D2D1_COLOR_SPACE preinterpolation_space,D2D1_COLOR_SPACE postinterpolation_space,D2D1_BUFFER_PRECISION buffer_precision,D2D1_EXTEND_MODE extend_mode,D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,ID2D1GradientStopCollection1 **gradient) {
    return This->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient);
}
static inline HRESULT ID2D1DeviceContext4_CreateImageBrush(ID2D1DeviceContext4* This,ID2D1Image *image,const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1ImageBrush **brush) {
    return This->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush);
}
static inline HRESULT ID2D1DeviceContext4_CreateBitmapBrush(ID2D1DeviceContext4* This,ID2D1Bitmap *bitmap,const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1BitmapBrush1 **bitmap_brush) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush);
}
static inline HRESULT ID2D1DeviceContext4_CreateCommandList(ID2D1DeviceContext4* This,ID2D1CommandList **command_list) {
    return This->lpVtbl->CreateCommandList(This,command_list);
}
static inline BOOL ID2D1DeviceContext4_IsDxgiFormatSupported(ID2D1DeviceContext4* This,DXGI_FORMAT format) {
    return This->lpVtbl->IsDxgiFormatSupported(This,format);
}
static inline BOOL ID2D1DeviceContext4_IsBufferPrecisionSupported(ID2D1DeviceContext4* This,D2D1_BUFFER_PRECISION buffer_precision) {
    return This->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision);
}
static inline HRESULT ID2D1DeviceContext4_GetImageLocalBounds(ID2D1DeviceContext4* This,ID2D1Image *image,D2D1_RECT_F *local_bounds) {
    return This->lpVtbl->GetImageLocalBounds(This,image,local_bounds);
}
static inline HRESULT ID2D1DeviceContext4_GetImageWorldBounds(ID2D1DeviceContext4* This,ID2D1Image *image,D2D1_RECT_F *world_bounds) {
    return This->lpVtbl->GetImageWorldBounds(This,image,world_bounds);
}
static inline HRESULT ID2D1DeviceContext4_GetGlyphRunWorldBounds(ID2D1DeviceContext4* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,DWRITE_MEASURING_MODE measuring_mode,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds);
}
static inline void ID2D1DeviceContext4_GetDevice(ID2D1DeviceContext4* This,ID2D1Device **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline void ID2D1DeviceContext4_SetTarget(ID2D1DeviceContext4* This,ID2D1Image *target) {
    This->lpVtbl->SetTarget(This,target);
}
static inline void ID2D1DeviceContext4_GetTarget(ID2D1DeviceContext4* This,ID2D1Image **target) {
    This->lpVtbl->GetTarget(This,target);
}
static inline void ID2D1DeviceContext4_SetRenderingControls(ID2D1DeviceContext4* This,const D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->SetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext4_GetRenderingControls(ID2D1DeviceContext4* This,D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->GetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext4_SetPrimitiveBlend(ID2D1DeviceContext4* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline D2D1_PRIMITIVE_BLEND ID2D1DeviceContext4_GetPrimitiveBlend(ID2D1DeviceContext4* This) {
    return This->lpVtbl->GetPrimitiveBlend(This);
}
static inline void ID2D1DeviceContext4_SetUnitMode(ID2D1DeviceContext4* This,D2D1_UNIT_MODE unit_mode) {
    This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline D2D1_UNIT_MODE ID2D1DeviceContext4_GetUnitMode(ID2D1DeviceContext4* This) {
    return This->lpVtbl->GetUnitMode(This);
}
static inline void ID2D1DeviceContext4_DrawGlyphRun(ID2D1DeviceContext4* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode);
}
static inline void ID2D1DeviceContext4_DrawImage(ID2D1DeviceContext4* This,ID2D1Image *image,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode,D2D1_COMPOSITE_MODE composite_mode) {
    This->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode);
}
static inline void ID2D1DeviceContext4_DrawBitmap(ID2D1DeviceContext4* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect,const D2D1_MATRIX_4X4_F *perspective_transform) {
    This->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform);
}
static inline void ID2D1DeviceContext4_PushLayer(ID2D1DeviceContext4* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    This->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1DeviceContext4_InvalidateEffectInputRectangle(ID2D1DeviceContext4* This,ID2D1Effect *effect,UINT32 input,const D2D1_RECT_F *input_rect) {
    return This->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect);
}
static inline HRESULT ID2D1DeviceContext4_GetEffectInvalidRectangleCount(ID2D1DeviceContext4* This,ID2D1Effect *effect,UINT32 *rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count);
}
static inline HRESULT ID2D1DeviceContext4_GetEffectInvalidRectangles(ID2D1DeviceContext4* This,ID2D1Effect *effect,D2D1_RECT_F *rectangles,UINT32 rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count);
}
static inline HRESULT ID2D1DeviceContext4_GetEffectRequiredInputRectangles(ID2D1DeviceContext4* This,ID2D1Effect *effect,const D2D1_RECT_F *image_rect,const D2D1_EFFECT_INPUT_DESCRIPTION *desc,D2D1_RECT_F *input_rect,UINT32 input_count) {
    return This->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count);
}
static inline void ID2D1DeviceContext4_FillOpacityMask(ID2D1DeviceContext4* This,ID2D1Bitmap *mask,ID2D1Brush *brush,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect);
}
/*** ID2D1DeviceContext1 methods ***/
static inline HRESULT ID2D1DeviceContext4_CreateFilledGeometryRealization(ID2D1DeviceContext4* This,ID2D1Geometry *geometry,float tolerance,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization);
}
static inline HRESULT ID2D1DeviceContext4_CreateStrokedGeometryRealization(ID2D1DeviceContext4* This,ID2D1Geometry *geometry,float tolerance,float stroke_width,ID2D1StrokeStyle *stroke_style,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization);
}
static inline void ID2D1DeviceContext4_DrawGeometryRealization(ID2D1DeviceContext4* This,ID2D1GeometryRealization *realization,ID2D1Brush *brush) {
    This->lpVtbl->DrawGeometryRealization(This,realization,brush);
}
/*** ID2D1DeviceContext2 methods ***/
static inline HRESULT ID2D1DeviceContext4_CreateInk(ID2D1DeviceContext4* This,const D2D1_INK_POINT *start_point,ID2D1Ink **ink) {
    return This->lpVtbl->CreateInk(This,start_point,ink);
}
static inline HRESULT ID2D1DeviceContext4_CreateInkStyle(ID2D1DeviceContext4* This,const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,ID2D1InkStyle **ink_style) {
    return This->lpVtbl->CreateInkStyle(This,ink_style_properties,ink_style);
}
static inline HRESULT ID2D1DeviceContext4_CreateGradientMesh(ID2D1DeviceContext4* This,const D2D1_GRADIENT_MESH_PATCH *patches,UINT32 patches_count,ID2D1GradientMesh **gradient_mesh) {
    return This->lpVtbl->CreateGradientMesh(This,patches,patches_count,gradient_mesh);
}
static inline HRESULT ID2D1DeviceContext4_CreateImageSourceFromWic(ID2D1DeviceContext4* This,IWICBitmapSource *wic_bitmap_source,D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,D2D1_ALPHA_MODE alpha_mode,ID2D1ImageSourceFromWic **image_source) {
    return This->lpVtbl->CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source);
}
static inline HRESULT ID2D1DeviceContext4_CreateLookupTable3D(ID2D1DeviceContext4* This,D2D1_BUFFER_PRECISION precision,const UINT32 *extents,const BYTE *data,UINT32 data_count,const UINT32 *strides,ID2D1LookupTable3D **lookup_table) {
    return This->lpVtbl->CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table);
}
static inline HRESULT ID2D1DeviceContext4_CreateImageSourceFromDxgi(ID2D1DeviceContext4* This,IDXGISurface **surfaces,UINT32 surface_count,DXGI_COLOR_SPACE_TYPE color_space,D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,ID2D1ImageSource **image_source) {
    return This->lpVtbl->CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source);
}
static inline HRESULT ID2D1DeviceContext4_GetGradientMeshWorldBounds(ID2D1DeviceContext4* This,ID2D1GradientMesh *gradient_mesh,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGradientMeshWorldBounds(This,gradient_mesh,bounds);
}
static inline void ID2D1DeviceContext4_DrawInk(ID2D1DeviceContext4* This,ID2D1Ink *ink,ID2D1Brush *brush,ID2D1InkStyle *ink_style) {
    This->lpVtbl->DrawInk(This,ink,brush,ink_style);
}
static inline void ID2D1DeviceContext4_DrawGradientMesh(ID2D1DeviceContext4* This,ID2D1GradientMesh *gradient_mesh) {
    This->lpVtbl->DrawGradientMesh(This,gradient_mesh);
}
static inline void ID2D1DeviceContext4_DrawGdiMetafile(ID2D1DeviceContext4* This,ID2D1GdiMetafile *gdi_metafile,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect);
}
static inline HRESULT ID2D1DeviceContext4_CreateTransformedImageSource(ID2D1DeviceContext4* This,ID2D1ImageSource *source,const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,ID2D1TransformedImageSource **transformed) {
    return This->lpVtbl->CreateTransformedImageSource(This,source,props,transformed);
}
/*** ID2D1DeviceContext3 methods ***/
static inline HRESULT ID2D1DeviceContext4_CreateSpriteBatch(ID2D1DeviceContext4* This,ID2D1SpriteBatch **sprite_batch) {
    return This->lpVtbl->CreateSpriteBatch(This,sprite_batch);
}
static inline void ID2D1DeviceContext4_DrawSpriteBatch(ID2D1DeviceContext4* This,ID2D1SpriteBatch *sprite_batch,UINT32 start_index,UINT32 sprite_count,ID2D1Bitmap *bitmap,D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,D2D1_SPRITE_OPTIONS sprite_options) {
    This->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options);
}
/*** ID2D1DeviceContext4 methods ***/
static inline HRESULT ID2D1DeviceContext4_CreateSvgGlyphStyle(ID2D1DeviceContext4* This,ID2D1SvgGlyphStyle **svg_glyph_style) {
    return This->lpVtbl->CreateSvgGlyphStyle(This,svg_glyph_style);
}
static inline void ID2D1DeviceContext4_DrawText(ID2D1DeviceContext4* This,const WCHAR *string,UINT32 string_length,IDWriteTextFormat *text_format,const D2D1_RECT_F *layout_rect,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,D2D1_DRAW_TEXT_OPTIONS options,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->ID2D1DeviceContext4_DrawText(This,string,string_length,text_format,layout_rect,default_fill_brush,svg_glyph_style,color_palette_index,options,measuring_mode);
}
static inline void ID2D1DeviceContext4_DrawTextLayout(ID2D1DeviceContext4* This,D2D1_POINT_2F origin,IDWriteTextLayout *text_layout,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,D2D1_DRAW_TEXT_OPTIONS options) {
    This->lpVtbl->ID2D1DeviceContext4_DrawTextLayout(This,origin,text_layout,default_fill_brush,svg_glyph_style,color_palette_index,options);
}
static inline void ID2D1DeviceContext4_DrawColorBitmapGlyphRun(ID2D1DeviceContext4* This,DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,DWRITE_MEASURING_MODE measuring_mode,D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION bitmap_snap_option) {
    This->lpVtbl->DrawColorBitmapGlyphRun(This,glyph_image_format,baseline_origin,glyph_run,measuring_mode,bitmap_snap_option);
}
static inline void ID2D1DeviceContext4_DrawSvgGlyphRun(ID2D1DeviceContext4* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->DrawSvgGlyphRun(This,baseline_origin,glyph_run,default_fill_brush,svg_glyph_style,color_palette_index,measuring_mode);
}
static inline HRESULT ID2D1DeviceContext4_GetColorBitmapGlyphImage(ID2D1DeviceContext4* This,DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,D2D1_POINT_2F glyph_origin,IDWriteFontFace *font_face,FLOAT font_em_size,UINT16 glyph_index,BOOL is_sideways,const D2D1_MATRIX_3X2_F *world_transform,FLOAT dpi_x,FLOAT dpi_y,D2D1_MATRIX_3X2_F *glyph_transform,ID2D1Image **glyph_image) {
    return This->lpVtbl->GetColorBitmapGlyphImage(This,glyph_image_format,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,dpi_x,dpi_y,glyph_transform,glyph_image);
}
static inline HRESULT ID2D1DeviceContext4_GetSvgGlyphImage(ID2D1DeviceContext4* This,D2D1_POINT_2F glyph_origin,IDWriteFontFace *font_face,FLOAT font_em_size,UINT16 glyph_index,BOOL is_sideways,const D2D1_MATRIX_3X2_F *world_transform,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,D2D1_MATRIX_3X2_F *glyph_transform,ID2D1CommandList **glyph_image) {
    return This->lpVtbl->GetSvgGlyphImage(This,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,default_fill_brush,svg_glyph_style,color_palette_index,glyph_transform,glyph_image);
}
#endif
#endif

#endif


#endif  /* __ID2D1DeviceContext4_INTERFACE_DEFINED__ */

#ifndef __ID2D1SvgDocument_FWD_DEFINED__
#define __ID2D1SvgDocument_FWD_DEFINED__
typedef interface ID2D1SvgDocument ID2D1SvgDocument;
#ifdef __cplusplus
interface ID2D1SvgDocument;
#endif /* __cplusplus */
#endif

/*****************************************************************************
 * ID2D1ColorContext1 interface
 */
#ifndef __ID2D1ColorContext1_INTERFACE_DEFINED__
#define __ID2D1ColorContext1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1ColorContext1, 0x1ab42875, 0xc57f, 0x4be9, 0xbd,0x85, 0x9c,0xd7,0x8d,0x6f,0x55,0xee);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1ab42875-c57f-4be9-bd85-9cd78d6f55ee")
ID2D1ColorContext1 : public ID2D1ColorContext
{
    virtual D2D1_COLOR_CONTEXT_TYPE STDMETHODCALLTYPE GetColorContextType(
        ) = 0;

    virtual DXGI_COLOR_SPACE_TYPE STDMETHODCALLTYPE GetDXGIColorSpace(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSimpleColorProfile(
        D2D1_SIMPLE_COLOR_PROFILE *simple_profile) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1ColorContext1, 0x1ab42875, 0xc57f, 0x4be9, 0xbd,0x85, 0x9c,0xd7,0x8d,0x6f,0x55,0xee)
#endif
#else
typedef struct ID2D1ColorContext1Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1ColorContext1 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1ColorContext1 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1ColorContext1 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1ColorContext1 *This,
        ID2D1Factory **factory);

    /*** ID2D1ColorContext methods ***/
    D2D1_COLOR_SPACE (STDMETHODCALLTYPE *GetColorSpace)(
        ID2D1ColorContext1 *This);

    UINT32 (STDMETHODCALLTYPE *GetProfileSize)(
        ID2D1ColorContext1 *This);

    HRESULT (STDMETHODCALLTYPE *GetProfile)(
        ID2D1ColorContext1 *This,
        BYTE *profile,
        UINT32 size);

    /*** ID2D1ColorContext1 methods ***/
    D2D1_COLOR_CONTEXT_TYPE (STDMETHODCALLTYPE *GetColorContextType)(
        ID2D1ColorContext1 *This);

    DXGI_COLOR_SPACE_TYPE (STDMETHODCALLTYPE *GetDXGIColorSpace)(
        ID2D1ColorContext1 *This);

    HRESULT (STDMETHODCALLTYPE *GetSimpleColorProfile)(
        ID2D1ColorContext1 *This,
        D2D1_SIMPLE_COLOR_PROFILE *simple_profile);

    END_INTERFACE
} ID2D1ColorContext1Vtbl;

interface ID2D1ColorContext1 {
    CONST_VTBL ID2D1ColorContext1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1ColorContext1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1ColorContext1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1ColorContext1_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1ColorContext1_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1ColorContext methods ***/
#define ID2D1ColorContext1_GetColorSpace(This) (This)->lpVtbl->GetColorSpace(This)
#define ID2D1ColorContext1_GetProfileSize(This) (This)->lpVtbl->GetProfileSize(This)
#define ID2D1ColorContext1_GetProfile(This,profile,size) (This)->lpVtbl->GetProfile(This,profile,size)
/*** ID2D1ColorContext1 methods ***/
#define ID2D1ColorContext1_GetColorContextType(This) (This)->lpVtbl->GetColorContextType(This)
#define ID2D1ColorContext1_GetDXGIColorSpace(This) (This)->lpVtbl->GetDXGIColorSpace(This)
#define ID2D1ColorContext1_GetSimpleColorProfile(This,simple_profile) (This)->lpVtbl->GetSimpleColorProfile(This,simple_profile)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1ColorContext1_QueryInterface(ID2D1ColorContext1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1ColorContext1_AddRef(ID2D1ColorContext1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1ColorContext1_Release(ID2D1ColorContext1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1ColorContext1_GetFactory(ID2D1ColorContext1* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1ColorContext methods ***/
static inline D2D1_COLOR_SPACE ID2D1ColorContext1_GetColorSpace(ID2D1ColorContext1* This) {
    return This->lpVtbl->GetColorSpace(This);
}
static inline UINT32 ID2D1ColorContext1_GetProfileSize(ID2D1ColorContext1* This) {
    return This->lpVtbl->GetProfileSize(This);
}
static inline HRESULT ID2D1ColorContext1_GetProfile(ID2D1ColorContext1* This,BYTE *profile,UINT32 size) {
    return This->lpVtbl->GetProfile(This,profile,size);
}
/*** ID2D1ColorContext1 methods ***/
static inline D2D1_COLOR_CONTEXT_TYPE ID2D1ColorContext1_GetColorContextType(ID2D1ColorContext1* This) {
    return This->lpVtbl->GetColorContextType(This);
}
static inline DXGI_COLOR_SPACE_TYPE ID2D1ColorContext1_GetDXGIColorSpace(ID2D1ColorContext1* This) {
    return This->lpVtbl->GetDXGIColorSpace(This);
}
static inline HRESULT ID2D1ColorContext1_GetSimpleColorProfile(ID2D1ColorContext1* This,D2D1_SIMPLE_COLOR_PROFILE *simple_profile) {
    return This->lpVtbl->GetSimpleColorProfile(This,simple_profile);
}
#endif
#endif

#endif


#endif  /* __ID2D1ColorContext1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1DeviceContext5 interface
 */
#ifndef __ID2D1DeviceContext5_INTERFACE_DEFINED__
#define __ID2D1DeviceContext5_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DeviceContext5, 0x7836d248, 0x68cc, 0x4df6, 0xb9,0xe8, 0xde,0x99,0x1b,0xf6,0x2e,0xb7);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7836d248-68cc-4df6-b9e8-de991bf62eb7")
ID2D1DeviceContext5 : public ID2D1DeviceContext4
{
    virtual HRESULT STDMETHODCALLTYPE CreateSvgDocument(
        IStream *input_xml_stream,
        D2D1_SIZE_F viewport_size,
        ID2D1SvgDocument **svg_document) = 0;

    virtual void STDMETHODCALLTYPE DrawSvgDocument(
        ID2D1SvgDocument *svg_document) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateColorContextFromDxgiColorSpace(
        DXGI_COLOR_SPACE_TYPE color_space,
        ID2D1ColorContext1 **color_context) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateColorContextFromSimpleColorProfile(
        const D2D1_SIMPLE_COLOR_PROFILE *simple_profile,
        ID2D1ColorContext1 **color_context) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DeviceContext5, 0x7836d248, 0x68cc, 0x4df6, 0xb9,0xe8, 0xde,0x99,0x1b,0xf6,0x2e,0xb7)
#endif
#else
typedef struct ID2D1DeviceContext5Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1DeviceContext5 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1DeviceContext5 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1DeviceContext5 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1DeviceContext5 *This,
        ID2D1Factory **factory);

    /*** ID2D1RenderTarget methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateBitmap)(
        ID2D1DeviceContext5 *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext5 *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateSharedBitmap)(
        ID2D1DeviceContext5 *This,
        REFIID iid,
        void *data,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapBrush)(
        ID2D1DeviceContext5 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateSolidColorBrush)(
        ID2D1DeviceContext5 *This,
        const D2D1_COLOR_F *color,
        const D2D1_BRUSH_PROPERTIES *desc,
        ID2D1SolidColorBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateGradientStopCollection)(
        ID2D1DeviceContext5 *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_GAMMA gamma,
        D2D1_EXTEND_MODE extend_mode,
        ID2D1GradientStopCollection **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateLinearGradientBrush)(
        ID2D1DeviceContext5 *This,
        const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1LinearGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateRadialGradientBrush)(
        ID2D1DeviceContext5 *This,
        const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1RadialGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateCompatibleRenderTarget)(
        ID2D1DeviceContext5 *This,
        const D2D1_SIZE_F *size,
        const D2D1_SIZE_U *pixel_size,
        const D2D1_PIXEL_FORMAT *format,
        D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,
        ID2D1BitmapRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateLayer)(
        ID2D1DeviceContext5 *This,
        const D2D1_SIZE_F *size,
        ID2D1Layer **layer);

    HRESULT (STDMETHODCALLTYPE *CreateMesh)(
        ID2D1DeviceContext5 *This,
        ID2D1Mesh **mesh);

    void (STDMETHODCALLTYPE *DrawLine)(
        ID2D1DeviceContext5 *This,
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *DrawRectangle)(
        ID2D1DeviceContext5 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRectangle)(
        ID2D1DeviceContext5 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawRoundedRectangle)(
        ID2D1DeviceContext5 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRoundedRectangle)(
        ID2D1DeviceContext5 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawEllipse)(
        ID2D1DeviceContext5 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillEllipse)(
        ID2D1DeviceContext5 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawGeometry)(
        ID2D1DeviceContext5 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillGeometry)(
        ID2D1DeviceContext5 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        ID2D1Brush *opacity_brush);

    void (STDMETHODCALLTYPE *FillMesh)(
        ID2D1DeviceContext5 *This,
        ID2D1Mesh *mesh,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *FillOpacityMask)(
        ID2D1DeviceContext5 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        D2D1_OPACITY_MASK_CONTENT content,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawBitmap)(
        ID2D1DeviceContext5 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawText)(
        ID2D1DeviceContext5 *This,
        const WCHAR *string,
        UINT32 string_len,
        IDWriteTextFormat *text_format,
        const D2D1_RECT_F *layout_rect,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawTextLayout)(
        ID2D1DeviceContext5 *This,
        D2D1_POINT_2F origin,
        IDWriteTextLayout *layout,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options);

    void (STDMETHODCALLTYPE *DrawGlyphRun)(
        ID2D1DeviceContext5 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *SetTransform)(
        ID2D1DeviceContext5 *This,
        const D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *GetTransform)(
        ID2D1DeviceContext5 *This,
        D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *SetAntialiasMode)(
        ID2D1DeviceContext5 *This,
        D2D1_ANTIALIAS_MODE antialias_mode);

    D2D1_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetAntialiasMode)(
        ID2D1DeviceContext5 *This);

    void (STDMETHODCALLTYPE *SetTextAntialiasMode)(
        ID2D1DeviceContext5 *This,
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode);

    D2D1_TEXT_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetTextAntialiasMode)(
        ID2D1DeviceContext5 *This);

    void (STDMETHODCALLTYPE *SetTextRenderingParams)(
        ID2D1DeviceContext5 *This,
        IDWriteRenderingParams *text_rendering_params);

    void (STDMETHODCALLTYPE *GetTextRenderingParams)(
        ID2D1DeviceContext5 *This,
        IDWriteRenderingParams **text_rendering_params);

    void (STDMETHODCALLTYPE *SetTags)(
        ID2D1DeviceContext5 *This,
        D2D1_TAG tag1,
        D2D1_TAG tag2);

    void (STDMETHODCALLTYPE *GetTags)(
        ID2D1DeviceContext5 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *PushLayer)(
        ID2D1DeviceContext5 *This,
        const D2D1_LAYER_PARAMETERS *layer_parameters,
        ID2D1Layer *layer);

    void (STDMETHODCALLTYPE *PopLayer)(
        ID2D1DeviceContext5 *This);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        ID2D1DeviceContext5 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *SaveDrawingState)(
        ID2D1DeviceContext5 *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *RestoreDrawingState)(
        ID2D1DeviceContext5 *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *PushAxisAlignedClip)(
        ID2D1DeviceContext5 *This,
        const D2D1_RECT_F *clip_rect,
        D2D1_ANTIALIAS_MODE antialias_mode);

    void (STDMETHODCALLTYPE *PopAxisAlignedClip)(
        ID2D1DeviceContext5 *This);

    void (STDMETHODCALLTYPE *Clear)(
        ID2D1DeviceContext5 *This,
        const D2D1_COLOR_F *color);

    void (STDMETHODCALLTYPE *BeginDraw)(
        ID2D1DeviceContext5 *This);

    HRESULT (STDMETHODCALLTYPE *EndDraw)(
        ID2D1DeviceContext5 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    D2D1_PIXEL_FORMAT * (STDMETHODCALLTYPE *GetPixelFormat)(
        ID2D1DeviceContext5 *This,
        D2D1_PIXEL_FORMAT *__ret);

    void (STDMETHODCALLTYPE *SetDpi)(
        ID2D1DeviceContext5 *This,
        float dpi_x,
        float dpi_y);

    void (STDMETHODCALLTYPE *GetDpi)(
        ID2D1DeviceContext5 *This,
        float *dpi_x,
        float *dpi_y);

    D2D1_SIZE_F * (STDMETHODCALLTYPE *GetSize)(
        ID2D1DeviceContext5 *This,
        D2D1_SIZE_F *__ret);

    D2D1_SIZE_U * (STDMETHODCALLTYPE *GetPixelSize)(
        ID2D1DeviceContext5 *This,
        D2D1_SIZE_U *__ret);

    UINT32 (STDMETHODCALLTYPE *GetMaximumBitmapSize)(
        ID2D1DeviceContext5 *This);

    BOOL (STDMETHODCALLTYPE *IsSupported)(
        ID2D1DeviceContext5 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc);

    /*** ID2D1DeviceContext methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmap)(
        ID2D1DeviceContext5 *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext5 *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateColorContext)(
        ID2D1DeviceContext5 *This,
        D2D1_COLOR_SPACE space,
        const BYTE *profile,
        UINT32 profile_size,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromFilename)(
        ID2D1DeviceContext5 *This,
        const WCHAR *filename,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromWicColorContext)(
        ID2D1DeviceContext5 *This,
        IWICColorContext *wic_color_context,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromDxgiSurface)(
        ID2D1DeviceContext5 *This,
        IDXGISurface *surface,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateEffect)(
        ID2D1DeviceContext5 *This,
        REFCLSID effect_id,
        ID2D1Effect **effect);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateGradientStopCollection)(
        ID2D1DeviceContext5 *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_COLOR_SPACE preinterpolation_space,
        D2D1_COLOR_SPACE postinterpolation_space,
        D2D1_BUFFER_PRECISION buffer_precision,
        D2D1_EXTEND_MODE extend_mode,
        D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,
        ID2D1GradientStopCollection1 **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateImageBrush)(
        ID2D1DeviceContext5 *This,
        ID2D1Image *image,
        const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1ImageBrush **brush);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapBrush)(
        ID2D1DeviceContext5 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush1 **bitmap_brush);

    HRESULT (STDMETHODCALLTYPE *CreateCommandList)(
        ID2D1DeviceContext5 *This,
        ID2D1CommandList **command_list);

    BOOL (STDMETHODCALLTYPE *IsDxgiFormatSupported)(
        ID2D1DeviceContext5 *This,
        DXGI_FORMAT format);

    BOOL (STDMETHODCALLTYPE *IsBufferPrecisionSupported)(
        ID2D1DeviceContext5 *This,
        D2D1_BUFFER_PRECISION buffer_precision);

    HRESULT (STDMETHODCALLTYPE *GetImageLocalBounds)(
        ID2D1DeviceContext5 *This,
        ID2D1Image *image,
        D2D1_RECT_F *local_bounds);

    HRESULT (STDMETHODCALLTYPE *GetImageWorldBounds)(
        ID2D1DeviceContext5 *This,
        ID2D1Image *image,
        D2D1_RECT_F *world_bounds);

    HRESULT (STDMETHODCALLTYPE *GetGlyphRunWorldBounds)(
        ID2D1DeviceContext5 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *GetDevice)(
        ID2D1DeviceContext5 *This,
        ID2D1Device **device);

    void (STDMETHODCALLTYPE *SetTarget)(
        ID2D1DeviceContext5 *This,
        ID2D1Image *target);

    void (STDMETHODCALLTYPE *GetTarget)(
        ID2D1DeviceContext5 *This,
        ID2D1Image **target);

    void (STDMETHODCALLTYPE *SetRenderingControls)(
        ID2D1DeviceContext5 *This,
        const D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *GetRenderingControls)(
        ID2D1DeviceContext5 *This,
        D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *SetPrimitiveBlend)(
        ID2D1DeviceContext5 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    D2D1_PRIMITIVE_BLEND (STDMETHODCALLTYPE *GetPrimitiveBlend)(
        ID2D1DeviceContext5 *This);

    void (STDMETHODCALLTYPE *SetUnitMode)(
        ID2D1DeviceContext5 *This,
        D2D1_UNIT_MODE unit_mode);

    D2D1_UNIT_MODE (STDMETHODCALLTYPE *GetUnitMode)(
        ID2D1DeviceContext5 *This);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawGlyphRun)(
        ID2D1DeviceContext5 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawImage)(
        ID2D1DeviceContext5 *This,
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode);

    void (STDMETHODCALLTYPE *DrawGdiMetafile)(
        ID2D1DeviceContext5 *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawBitmap)(
        ID2D1DeviceContext5 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_PushLayer)(
        ID2D1DeviceContext5 *This,
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer);

    HRESULT (STDMETHODCALLTYPE *InvalidateEffectInputRectangle)(
        ID2D1DeviceContext5 *This,
        ID2D1Effect *effect,
        UINT32 input,
        const D2D1_RECT_F *input_rect);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangleCount)(
        ID2D1DeviceContext5 *This,
        ID2D1Effect *effect,
        UINT32 *rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangles)(
        ID2D1DeviceContext5 *This,
        ID2D1Effect *effect,
        D2D1_RECT_F *rectangles,
        UINT32 rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectRequiredInputRectangles)(
        ID2D1DeviceContext5 *This,
        ID2D1Effect *effect,
        const D2D1_RECT_F *image_rect,
        const D2D1_EFFECT_INPUT_DESCRIPTION *desc,
        D2D1_RECT_F *input_rect,
        UINT32 input_count);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_FillOpacityMask)(
        ID2D1DeviceContext5 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    /*** ID2D1DeviceContext1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateFilledGeometryRealization)(
        ID2D1DeviceContext5 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        ID2D1GeometryRealization **realization);

    HRESULT (STDMETHODCALLTYPE *CreateStrokedGeometryRealization)(
        ID2D1DeviceContext5 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        ID2D1GeometryRealization **realization);

    void (STDMETHODCALLTYPE *DrawGeometryRealization)(
        ID2D1DeviceContext5 *This,
        ID2D1GeometryRealization *realization,
        ID2D1Brush *brush);

    /*** ID2D1DeviceContext2 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateInk)(
        ID2D1DeviceContext5 *This,
        const D2D1_INK_POINT *start_point,
        ID2D1Ink **ink);

    HRESULT (STDMETHODCALLTYPE *CreateInkStyle)(
        ID2D1DeviceContext5 *This,
        const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,
        ID2D1InkStyle **ink_style);

    HRESULT (STDMETHODCALLTYPE *CreateGradientMesh)(
        ID2D1DeviceContext5 *This,
        const D2D1_GRADIENT_MESH_PATCH *patches,
        UINT32 patches_count,
        ID2D1GradientMesh **gradient_mesh);

    HRESULT (STDMETHODCALLTYPE *CreateImageSourceFromWic)(
        ID2D1DeviceContext5 *This,
        IWICBitmapSource *wic_bitmap_source,
        D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,
        D2D1_ALPHA_MODE alpha_mode,
        ID2D1ImageSourceFromWic **image_source);

    HRESULT (STDMETHODCALLTYPE *CreateLookupTable3D)(
        ID2D1DeviceContext5 *This,
        D2D1_BUFFER_PRECISION precision,
        const UINT32 *extents,
        const BYTE *data,
        UINT32 data_count,
        const UINT32 *strides,
        ID2D1LookupTable3D **lookup_table);

    HRESULT (STDMETHODCALLTYPE *CreateImageSourceFromDxgi)(
        ID2D1DeviceContext5 *This,
        IDXGISurface **surfaces,
        UINT32 surface_count,
        DXGI_COLOR_SPACE_TYPE color_space,
        D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,
        ID2D1ImageSource **image_source);

    HRESULT (STDMETHODCALLTYPE *GetGradientMeshWorldBounds)(
        ID2D1DeviceContext5 *This,
        ID2D1GradientMesh *gradient_mesh,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *DrawInk)(
        ID2D1DeviceContext5 *This,
        ID2D1Ink *ink,
        ID2D1Brush *brush,
        ID2D1InkStyle *ink_style);

    void (STDMETHODCALLTYPE *DrawGradientMesh)(
        ID2D1DeviceContext5 *This,
        ID2D1GradientMesh *gradient_mesh);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext2_DrawGdiMetafile)(
        ID2D1DeviceContext5 *This,
        ID2D1GdiMetafile *gdi_metafile,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedImageSource)(
        ID2D1DeviceContext5 *This,
        ID2D1ImageSource *source,
        const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,
        ID2D1TransformedImageSource **transformed);

    /*** ID2D1DeviceContext3 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSpriteBatch)(
        ID2D1DeviceContext5 *This,
        ID2D1SpriteBatch **sprite_batch);

    void (STDMETHODCALLTYPE *DrawSpriteBatch)(
        ID2D1DeviceContext5 *This,
        ID2D1SpriteBatch *sprite_batch,
        UINT32 start_index,
        UINT32 sprite_count,
        ID2D1Bitmap *bitmap,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        D2D1_SPRITE_OPTIONS sprite_options);

    /*** ID2D1DeviceContext4 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSvgGlyphStyle)(
        ID2D1DeviceContext5 *This,
        ID2D1SvgGlyphStyle **svg_glyph_style);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext4_DrawText)(
        ID2D1DeviceContext5 *This,
        const WCHAR *string,
        UINT32 string_length,
        IDWriteTextFormat *text_format,
        const D2D1_RECT_F *layout_rect,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_DRAW_TEXT_OPTIONS options,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext4_DrawTextLayout)(
        ID2D1DeviceContext5 *This,
        D2D1_POINT_2F origin,
        IDWriteTextLayout *text_layout,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_DRAW_TEXT_OPTIONS options);

    void (STDMETHODCALLTYPE *DrawColorBitmapGlyphRun)(
        ID2D1DeviceContext5 *This,
        DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION bitmap_snap_option);

    void (STDMETHODCALLTYPE *DrawSvgGlyphRun)(
        ID2D1DeviceContext5 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        DWRITE_MEASURING_MODE measuring_mode);

    HRESULT (STDMETHODCALLTYPE *GetColorBitmapGlyphImage)(
        ID2D1DeviceContext5 *This,
        DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,
        D2D1_POINT_2F glyph_origin,
        IDWriteFontFace *font_face,
        FLOAT font_em_size,
        UINT16 glyph_index,
        BOOL is_sideways,
        const D2D1_MATRIX_3X2_F *world_transform,
        FLOAT dpi_x,
        FLOAT dpi_y,
        D2D1_MATRIX_3X2_F *glyph_transform,
        ID2D1Image **glyph_image);

    HRESULT (STDMETHODCALLTYPE *GetSvgGlyphImage)(
        ID2D1DeviceContext5 *This,
        D2D1_POINT_2F glyph_origin,
        IDWriteFontFace *font_face,
        FLOAT font_em_size,
        UINT16 glyph_index,
        BOOL is_sideways,
        const D2D1_MATRIX_3X2_F *world_transform,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_MATRIX_3X2_F *glyph_transform,
        ID2D1CommandList **glyph_image);

    /*** ID2D1DeviceContext5 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSvgDocument)(
        ID2D1DeviceContext5 *This,
        IStream *input_xml_stream,
        D2D1_SIZE_F viewport_size,
        ID2D1SvgDocument **svg_document);

    void (STDMETHODCALLTYPE *DrawSvgDocument)(
        ID2D1DeviceContext5 *This,
        ID2D1SvgDocument *svg_document);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromDxgiColorSpace)(
        ID2D1DeviceContext5 *This,
        DXGI_COLOR_SPACE_TYPE color_space,
        ID2D1ColorContext1 **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromSimpleColorProfile)(
        ID2D1DeviceContext5 *This,
        const D2D1_SIMPLE_COLOR_PROFILE *simple_profile,
        ID2D1ColorContext1 **color_context);

    END_INTERFACE
} ID2D1DeviceContext5Vtbl;

interface ID2D1DeviceContext5 {
    CONST_VTBL ID2D1DeviceContext5Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DeviceContext5_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DeviceContext5_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DeviceContext5_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1DeviceContext5_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1RenderTarget methods ***/
#define ID2D1DeviceContext5_CreateSharedBitmap(This,iid,data,desc,bitmap) (This)->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap)
#define ID2D1DeviceContext5_CreateSolidColorBrush(This,color,desc,brush) (This)->lpVtbl->CreateSolidColorBrush(This,color,desc,brush)
#define ID2D1DeviceContext5_CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext5_CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext5_CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target) (This)->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target)
#define ID2D1DeviceContext5_CreateLayer(This,size,layer) (This)->lpVtbl->CreateLayer(This,size,layer)
#define ID2D1DeviceContext5_CreateMesh(This,mesh) (This)->lpVtbl->CreateMesh(This,mesh)
#define ID2D1DeviceContext5_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext5_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext5_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1DeviceContext5_DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext5_FillRoundedRectangle(This,rect,brush) (This)->lpVtbl->FillRoundedRectangle(This,rect,brush)
#define ID2D1DeviceContext5_DrawEllipse(This,ellipse,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext5_FillEllipse(This,ellipse,brush) (This)->lpVtbl->FillEllipse(This,ellipse,brush)
#define ID2D1DeviceContext5_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext5_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1DeviceContext5_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1DeviceContext5_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1DeviceContext5_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#define ID2D1DeviceContext5_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext5_GetAntialiasMode(This) (This)->lpVtbl->GetAntialiasMode(This)
#define ID2D1DeviceContext5_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext5_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
#define ID2D1DeviceContext5_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext5_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext5_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1DeviceContext5_GetTags(This,tag1,tag2) (This)->lpVtbl->GetTags(This,tag1,tag2)
#define ID2D1DeviceContext5_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#define ID2D1DeviceContext5_Flush(This,tag1,tag2) (This)->lpVtbl->Flush(This,tag1,tag2)
#define ID2D1DeviceContext5_SaveDrawingState(This,state_block) (This)->lpVtbl->SaveDrawingState(This,state_block)
#define ID2D1DeviceContext5_RestoreDrawingState(This,state_block) (This)->lpVtbl->RestoreDrawingState(This,state_block)
#define ID2D1DeviceContext5_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1DeviceContext5_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1DeviceContext5_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1DeviceContext5_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1DeviceContext5_EndDraw(This,tag1,tag2) (This)->lpVtbl->EndDraw(This,tag1,tag2)
#define ID2D1DeviceContext5_GetPixelFormat(This) ID2D1DeviceContext5_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext5_SetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->SetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext5_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext5_GetSize(This) ID2D1DeviceContext5_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext5_GetPixelSize(This) ID2D1DeviceContext5_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext5_GetMaximumBitmapSize(This) (This)->lpVtbl->GetMaximumBitmapSize(This)
#define ID2D1DeviceContext5_IsSupported(This,desc) (This)->lpVtbl->IsSupported(This,desc)
/*** ID2D1DeviceContext methods ***/
#define ID2D1DeviceContext5_CreateBitmap(This,size,src_data,pitch,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap)
#define ID2D1DeviceContext5_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap)
#define ID2D1DeviceContext5_CreateColorContext(This,space,profile,profile_size,color_context) (This)->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context)
#define ID2D1DeviceContext5_CreateColorContextFromFilename(This,filename,color_context) (This)->lpVtbl->CreateColorContextFromFilename(This,filename,color_context)
#define ID2D1DeviceContext5_CreateColorContextFromWicColorContext(This,wic_color_context,color_context) (This)->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context)
#define ID2D1DeviceContext5_CreateBitmapFromDxgiSurface(This,surface,desc,bitmap) (This)->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap)
#define ID2D1DeviceContext5_CreateEffect(This,effect_id,effect) (This)->lpVtbl->CreateEffect(This,effect_id,effect)
#define ID2D1DeviceContext5_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient) (This)->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient)
#define ID2D1DeviceContext5_CreateImageBrush(This,image,image_brush_desc,brush_desc,brush) (This)->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush)
#define ID2D1DeviceContext5_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush)
#define ID2D1DeviceContext5_CreateCommandList(This,command_list) (This)->lpVtbl->CreateCommandList(This,command_list)
#define ID2D1DeviceContext5_IsDxgiFormatSupported(This,format) (This)->lpVtbl->IsDxgiFormatSupported(This,format)
#define ID2D1DeviceContext5_IsBufferPrecisionSupported(This,buffer_precision) (This)->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision)
#define ID2D1DeviceContext5_GetImageLocalBounds(This,image,local_bounds) (This)->lpVtbl->GetImageLocalBounds(This,image,local_bounds)
#define ID2D1DeviceContext5_GetImageWorldBounds(This,image,world_bounds) (This)->lpVtbl->GetImageWorldBounds(This,image,world_bounds)
#define ID2D1DeviceContext5_GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds) (This)->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds)
#define ID2D1DeviceContext5_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define ID2D1DeviceContext5_SetTarget(This,target) (This)->lpVtbl->SetTarget(This,target)
#define ID2D1DeviceContext5_GetTarget(This,target) (This)->lpVtbl->GetTarget(This,target)
#define ID2D1DeviceContext5_SetRenderingControls(This,rendering_controls) (This)->lpVtbl->SetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext5_GetRenderingControls(This,rendering_controls) (This)->lpVtbl->GetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext5_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1DeviceContext5_GetPrimitiveBlend(This) (This)->lpVtbl->GetPrimitiveBlend(This)
#define ID2D1DeviceContext5_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1DeviceContext5_GetUnitMode(This) (This)->lpVtbl->GetUnitMode(This)
#define ID2D1DeviceContext5_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode) (This)->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode)
#define ID2D1DeviceContext5_DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode) (This)->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode)
#define ID2D1DeviceContext5_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform) (This)->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform)
#define ID2D1DeviceContext5_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer)
#define ID2D1DeviceContext5_InvalidateEffectInputRectangle(This,effect,input,input_rect) (This)->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect)
#define ID2D1DeviceContext5_GetEffectInvalidRectangleCount(This,effect,rect_count) (This)->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count)
#define ID2D1DeviceContext5_GetEffectInvalidRectangles(This,effect,rectangles,rect_count) (This)->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count)
#define ID2D1DeviceContext5_GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count) (This)->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count)
#define ID2D1DeviceContext5_FillOpacityMask(This,mask,brush,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect)
/*** ID2D1DeviceContext1 methods ***/
#define ID2D1DeviceContext5_CreateFilledGeometryRealization(This,geometry,tolerance,realization) (This)->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization)
#define ID2D1DeviceContext5_CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization) (This)->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization)
#define ID2D1DeviceContext5_DrawGeometryRealization(This,realization,brush) (This)->lpVtbl->DrawGeometryRealization(This,realization,brush)
/*** ID2D1DeviceContext2 methods ***/
#define ID2D1DeviceContext5_CreateInk(This,start_point,ink) (This)->lpVtbl->CreateInk(This,start_point,ink)
#define ID2D1DeviceContext5_CreateInkStyle(This,ink_style_properties,ink_style) (This)->lpVtbl->CreateInkStyle(This,ink_style_properties,ink_style)
#define ID2D1DeviceContext5_CreateGradientMesh(This,patches,patches_count,gradient_mesh) (This)->lpVtbl->CreateGradientMesh(This,patches,patches_count,gradient_mesh)
#define ID2D1DeviceContext5_CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source) (This)->lpVtbl->CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source)
#define ID2D1DeviceContext5_CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table) (This)->lpVtbl->CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table)
#define ID2D1DeviceContext5_CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source) (This)->lpVtbl->CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source)
#define ID2D1DeviceContext5_GetGradientMeshWorldBounds(This,gradient_mesh,bounds) (This)->lpVtbl->GetGradientMeshWorldBounds(This,gradient_mesh,bounds)
#define ID2D1DeviceContext5_DrawInk(This,ink,brush,ink_style) (This)->lpVtbl->DrawInk(This,ink,brush,ink_style)
#define ID2D1DeviceContext5_DrawGradientMesh(This,gradient_mesh) (This)->lpVtbl->DrawGradientMesh(This,gradient_mesh)
#define ID2D1DeviceContext5_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect)
#define ID2D1DeviceContext5_CreateTransformedImageSource(This,source,props,transformed) (This)->lpVtbl->CreateTransformedImageSource(This,source,props,transformed)
/*** ID2D1DeviceContext3 methods ***/
#define ID2D1DeviceContext5_CreateSpriteBatch(This,sprite_batch) (This)->lpVtbl->CreateSpriteBatch(This,sprite_batch)
#define ID2D1DeviceContext5_DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options) (This)->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options)
/*** ID2D1DeviceContext4 methods ***/
#define ID2D1DeviceContext5_CreateSvgGlyphStyle(This,svg_glyph_style) (This)->lpVtbl->CreateSvgGlyphStyle(This,svg_glyph_style)
#define ID2D1DeviceContext5_DrawText(This,string,string_length,text_format,layout_rect,default_fill_brush,svg_glyph_style,color_palette_index,options,measuring_mode) (This)->lpVtbl->ID2D1DeviceContext4_DrawText(This,string,string_length,text_format,layout_rect,default_fill_brush,svg_glyph_style,color_palette_index,options,measuring_mode)
#define ID2D1DeviceContext5_DrawTextLayout(This,origin,text_layout,default_fill_brush,svg_glyph_style,color_palette_index,options) (This)->lpVtbl->ID2D1DeviceContext4_DrawTextLayout(This,origin,text_layout,default_fill_brush,svg_glyph_style,color_palette_index,options)
#define ID2D1DeviceContext5_DrawColorBitmapGlyphRun(This,glyph_image_format,baseline_origin,glyph_run,measuring_mode,bitmap_snap_option) (This)->lpVtbl->DrawColorBitmapGlyphRun(This,glyph_image_format,baseline_origin,glyph_run,measuring_mode,bitmap_snap_option)
#define ID2D1DeviceContext5_DrawSvgGlyphRun(This,baseline_origin,glyph_run,default_fill_brush,svg_glyph_style,color_palette_index,measuring_mode) (This)->lpVtbl->DrawSvgGlyphRun(This,baseline_origin,glyph_run,default_fill_brush,svg_glyph_style,color_palette_index,measuring_mode)
#define ID2D1DeviceContext5_GetColorBitmapGlyphImage(This,glyph_image_format,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,dpi_x,dpi_y,glyph_transform,glyph_image) (This)->lpVtbl->GetColorBitmapGlyphImage(This,glyph_image_format,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,dpi_x,dpi_y,glyph_transform,glyph_image)
#define ID2D1DeviceContext5_GetSvgGlyphImage(This,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,default_fill_brush,svg_glyph_style,color_palette_index,glyph_transform,glyph_image) (This)->lpVtbl->GetSvgGlyphImage(This,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,default_fill_brush,svg_glyph_style,color_palette_index,glyph_transform,glyph_image)
/*** ID2D1DeviceContext5 methods ***/
#define ID2D1DeviceContext5_CreateSvgDocument(This,input_xml_stream,viewport_size,svg_document) (This)->lpVtbl->CreateSvgDocument(This,input_xml_stream,viewport_size,svg_document)
#define ID2D1DeviceContext5_DrawSvgDocument(This,svg_document) (This)->lpVtbl->DrawSvgDocument(This,svg_document)
#define ID2D1DeviceContext5_CreateColorContextFromDxgiColorSpace(This,color_space,color_context) (This)->lpVtbl->CreateColorContextFromDxgiColorSpace(This,color_space,color_context)
#define ID2D1DeviceContext5_CreateColorContextFromSimpleColorProfile(This,simple_profile,color_context) (This)->lpVtbl->CreateColorContextFromSimpleColorProfile(This,simple_profile,color_context)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1DeviceContext5_QueryInterface(ID2D1DeviceContext5* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1DeviceContext5_AddRef(ID2D1DeviceContext5* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1DeviceContext5_Release(ID2D1DeviceContext5* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1DeviceContext5_GetFactory(ID2D1DeviceContext5* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1RenderTarget methods ***/
static inline HRESULT ID2D1DeviceContext5_CreateSharedBitmap(ID2D1DeviceContext5* This,REFIID iid,void *data,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext5_CreateSolidColorBrush(ID2D1DeviceContext5* This,const D2D1_COLOR_F *color,const D2D1_BRUSH_PROPERTIES *desc,ID2D1SolidColorBrush **brush) {
    return This->lpVtbl->CreateSolidColorBrush(This,color,desc,brush);
}
static inline HRESULT ID2D1DeviceContext5_CreateLinearGradientBrush(ID2D1DeviceContext5* This,const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1LinearGradientBrush **brush) {
    return This->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext5_CreateRadialGradientBrush(ID2D1DeviceContext5* This,const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1RadialGradientBrush **brush) {
    return This->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext5_CreateCompatibleRenderTarget(ID2D1DeviceContext5* This,const D2D1_SIZE_F *size,const D2D1_SIZE_U *pixel_size,const D2D1_PIXEL_FORMAT *format,D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,ID2D1BitmapRenderTarget **render_target) {
    return This->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target);
}
static inline HRESULT ID2D1DeviceContext5_CreateLayer(ID2D1DeviceContext5* This,const D2D1_SIZE_F *size,ID2D1Layer **layer) {
    return This->lpVtbl->CreateLayer(This,size,layer);
}
static inline HRESULT ID2D1DeviceContext5_CreateMesh(ID2D1DeviceContext5* This,ID2D1Mesh **mesh) {
    return This->lpVtbl->CreateMesh(This,mesh);
}
static inline void ID2D1DeviceContext5_DrawLine(ID2D1DeviceContext5* This,D2D1_POINT_2F p0,D2D1_POINT_2F p1,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext5_DrawRectangle(ID2D1DeviceContext5* This,const D2D1_RECT_F *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext5_FillRectangle(ID2D1DeviceContext5* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext5_DrawRoundedRectangle(ID2D1DeviceContext5* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext5_FillRoundedRectangle(ID2D1DeviceContext5* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRoundedRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext5_DrawEllipse(ID2D1DeviceContext5* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext5_FillEllipse(ID2D1DeviceContext5* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush) {
    This->lpVtbl->FillEllipse(This,ellipse,brush);
}
static inline void ID2D1DeviceContext5_DrawGeometry(ID2D1DeviceContext5* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext5_FillGeometry(ID2D1DeviceContext5* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline void ID2D1DeviceContext5_FillMesh(ID2D1DeviceContext5* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline void ID2D1DeviceContext5_SetTransform(ID2D1DeviceContext5* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static inline void ID2D1DeviceContext5_GetTransform(ID2D1DeviceContext5* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
static inline void ID2D1DeviceContext5_SetAntialiasMode(ID2D1DeviceContext5* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline D2D1_ANTIALIAS_MODE ID2D1DeviceContext5_GetAntialiasMode(ID2D1DeviceContext5* This) {
    return This->lpVtbl->GetAntialiasMode(This);
}
static inline void ID2D1DeviceContext5_SetTextAntialiasMode(ID2D1DeviceContext5* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline D2D1_TEXT_ANTIALIAS_MODE ID2D1DeviceContext5_GetTextAntialiasMode(ID2D1DeviceContext5* This) {
    return This->lpVtbl->GetTextAntialiasMode(This);
}
static inline void ID2D1DeviceContext5_SetTextRenderingParams(ID2D1DeviceContext5* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext5_GetTextRenderingParams(ID2D1DeviceContext5* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext5_SetTags(ID2D1DeviceContext5* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext5_GetTags(ID2D1DeviceContext5* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    This->lpVtbl->GetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext5_PopLayer(ID2D1DeviceContext5* This) {
    This->lpVtbl->PopLayer(This);
}
static inline HRESULT ID2D1DeviceContext5_Flush(ID2D1DeviceContext5* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->Flush(This,tag1,tag2);
}
static inline void ID2D1DeviceContext5_SaveDrawingState(ID2D1DeviceContext5* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->SaveDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext5_RestoreDrawingState(ID2D1DeviceContext5* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->RestoreDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext5_PushAxisAlignedClip(ID2D1DeviceContext5* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline void ID2D1DeviceContext5_PopAxisAlignedClip(ID2D1DeviceContext5* This) {
    This->lpVtbl->PopAxisAlignedClip(This);
}
static inline void ID2D1DeviceContext5_Clear(ID2D1DeviceContext5* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->Clear(This,color);
}
static inline void ID2D1DeviceContext5_BeginDraw(ID2D1DeviceContext5* This) {
    This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1DeviceContext5_EndDraw(ID2D1DeviceContext5* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->EndDraw(This,tag1,tag2);
}
static inline D2D1_PIXEL_FORMAT ID2D1DeviceContext5_GetPixelFormat(ID2D1DeviceContext5* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static inline void ID2D1DeviceContext5_SetDpi(ID2D1DeviceContext5* This,float dpi_x,float dpi_y) {
    This->lpVtbl->SetDpi(This,dpi_x,dpi_y);
}
static inline void ID2D1DeviceContext5_GetDpi(ID2D1DeviceContext5* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static inline D2D1_SIZE_F ID2D1DeviceContext5_GetSize(ID2D1DeviceContext5* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static inline D2D1_SIZE_U ID2D1DeviceContext5_GetPixelSize(ID2D1DeviceContext5* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static inline UINT32 ID2D1DeviceContext5_GetMaximumBitmapSize(ID2D1DeviceContext5* This) {
    return This->lpVtbl->GetMaximumBitmapSize(This);
}
static inline BOOL ID2D1DeviceContext5_IsSupported(ID2D1DeviceContext5* This,const D2D1_RENDER_TARGET_PROPERTIES *desc) {
    return This->lpVtbl->IsSupported(This,desc);
}
/*** ID2D1DeviceContext methods ***/
static inline HRESULT ID2D1DeviceContext5_CreateBitmap(ID2D1DeviceContext5* This,D2D1_SIZE_U size,const void *src_data,UINT32 pitch,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext5_CreateBitmapFromWicBitmap(ID2D1DeviceContext5* This,IWICBitmapSource *bitmap_source,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext5_CreateColorContext(ID2D1DeviceContext5* This,D2D1_COLOR_SPACE space,const BYTE *profile,UINT32 profile_size,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context);
}
static inline HRESULT ID2D1DeviceContext5_CreateColorContextFromFilename(ID2D1DeviceContext5* This,const WCHAR *filename,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromFilename(This,filename,color_context);
}
static inline HRESULT ID2D1DeviceContext5_CreateColorContextFromWicColorContext(ID2D1DeviceContext5* This,IWICColorContext *wic_color_context,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context);
}
static inline HRESULT ID2D1DeviceContext5_CreateBitmapFromDxgiSurface(ID2D1DeviceContext5* This,IDXGISurface *surface,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext5_CreateEffect(ID2D1DeviceContext5* This,REFCLSID effect_id,ID2D1Effect **effect) {
    return This->lpVtbl->CreateEffect(This,effect_id,effect);
}
static inline HRESULT ID2D1DeviceContext5_CreateGradientStopCollection(ID2D1DeviceContext5* This,const D2D1_GRADIENT_STOP *stops,UINT32 stop_count,D2D1_COLOR_SPACE preinterpolation_space,D2D1_COLOR_SPACE postinterpolation_space,D2D1_BUFFER_PRECISION buffer_precision,D2D1_EXTEND_MODE extend_mode,D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,ID2D1GradientStopCollection1 **gradient) {
    return This->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient);
}
static inline HRESULT ID2D1DeviceContext5_CreateImageBrush(ID2D1DeviceContext5* This,ID2D1Image *image,const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1ImageBrush **brush) {
    return This->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush);
}
static inline HRESULT ID2D1DeviceContext5_CreateBitmapBrush(ID2D1DeviceContext5* This,ID2D1Bitmap *bitmap,const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1BitmapBrush1 **bitmap_brush) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush);
}
static inline HRESULT ID2D1DeviceContext5_CreateCommandList(ID2D1DeviceContext5* This,ID2D1CommandList **command_list) {
    return This->lpVtbl->CreateCommandList(This,command_list);
}
static inline BOOL ID2D1DeviceContext5_IsDxgiFormatSupported(ID2D1DeviceContext5* This,DXGI_FORMAT format) {
    return This->lpVtbl->IsDxgiFormatSupported(This,format);
}
static inline BOOL ID2D1DeviceContext5_IsBufferPrecisionSupported(ID2D1DeviceContext5* This,D2D1_BUFFER_PRECISION buffer_precision) {
    return This->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision);
}
static inline HRESULT ID2D1DeviceContext5_GetImageLocalBounds(ID2D1DeviceContext5* This,ID2D1Image *image,D2D1_RECT_F *local_bounds) {
    return This->lpVtbl->GetImageLocalBounds(This,image,local_bounds);
}
static inline HRESULT ID2D1DeviceContext5_GetImageWorldBounds(ID2D1DeviceContext5* This,ID2D1Image *image,D2D1_RECT_F *world_bounds) {
    return This->lpVtbl->GetImageWorldBounds(This,image,world_bounds);
}
static inline HRESULT ID2D1DeviceContext5_GetGlyphRunWorldBounds(ID2D1DeviceContext5* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,DWRITE_MEASURING_MODE measuring_mode,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds);
}
static inline void ID2D1DeviceContext5_GetDevice(ID2D1DeviceContext5* This,ID2D1Device **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline void ID2D1DeviceContext5_SetTarget(ID2D1DeviceContext5* This,ID2D1Image *target) {
    This->lpVtbl->SetTarget(This,target);
}
static inline void ID2D1DeviceContext5_GetTarget(ID2D1DeviceContext5* This,ID2D1Image **target) {
    This->lpVtbl->GetTarget(This,target);
}
static inline void ID2D1DeviceContext5_SetRenderingControls(ID2D1DeviceContext5* This,const D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->SetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext5_GetRenderingControls(ID2D1DeviceContext5* This,D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->GetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext5_SetPrimitiveBlend(ID2D1DeviceContext5* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline D2D1_PRIMITIVE_BLEND ID2D1DeviceContext5_GetPrimitiveBlend(ID2D1DeviceContext5* This) {
    return This->lpVtbl->GetPrimitiveBlend(This);
}
static inline void ID2D1DeviceContext5_SetUnitMode(ID2D1DeviceContext5* This,D2D1_UNIT_MODE unit_mode) {
    This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline D2D1_UNIT_MODE ID2D1DeviceContext5_GetUnitMode(ID2D1DeviceContext5* This) {
    return This->lpVtbl->GetUnitMode(This);
}
static inline void ID2D1DeviceContext5_DrawGlyphRun(ID2D1DeviceContext5* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode);
}
static inline void ID2D1DeviceContext5_DrawImage(ID2D1DeviceContext5* This,ID2D1Image *image,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode,D2D1_COMPOSITE_MODE composite_mode) {
    This->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode);
}
static inline void ID2D1DeviceContext5_DrawBitmap(ID2D1DeviceContext5* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect,const D2D1_MATRIX_4X4_F *perspective_transform) {
    This->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform);
}
static inline void ID2D1DeviceContext5_PushLayer(ID2D1DeviceContext5* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    This->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1DeviceContext5_InvalidateEffectInputRectangle(ID2D1DeviceContext5* This,ID2D1Effect *effect,UINT32 input,const D2D1_RECT_F *input_rect) {
    return This->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect);
}
static inline HRESULT ID2D1DeviceContext5_GetEffectInvalidRectangleCount(ID2D1DeviceContext5* This,ID2D1Effect *effect,UINT32 *rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count);
}
static inline HRESULT ID2D1DeviceContext5_GetEffectInvalidRectangles(ID2D1DeviceContext5* This,ID2D1Effect *effect,D2D1_RECT_F *rectangles,UINT32 rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count);
}
static inline HRESULT ID2D1DeviceContext5_GetEffectRequiredInputRectangles(ID2D1DeviceContext5* This,ID2D1Effect *effect,const D2D1_RECT_F *image_rect,const D2D1_EFFECT_INPUT_DESCRIPTION *desc,D2D1_RECT_F *input_rect,UINT32 input_count) {
    return This->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count);
}
static inline void ID2D1DeviceContext5_FillOpacityMask(ID2D1DeviceContext5* This,ID2D1Bitmap *mask,ID2D1Brush *brush,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect);
}
/*** ID2D1DeviceContext1 methods ***/
static inline HRESULT ID2D1DeviceContext5_CreateFilledGeometryRealization(ID2D1DeviceContext5* This,ID2D1Geometry *geometry,float tolerance,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization);
}
static inline HRESULT ID2D1DeviceContext5_CreateStrokedGeometryRealization(ID2D1DeviceContext5* This,ID2D1Geometry *geometry,float tolerance,float stroke_width,ID2D1StrokeStyle *stroke_style,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization);
}
static inline void ID2D1DeviceContext5_DrawGeometryRealization(ID2D1DeviceContext5* This,ID2D1GeometryRealization *realization,ID2D1Brush *brush) {
    This->lpVtbl->DrawGeometryRealization(This,realization,brush);
}
/*** ID2D1DeviceContext2 methods ***/
static inline HRESULT ID2D1DeviceContext5_CreateInk(ID2D1DeviceContext5* This,const D2D1_INK_POINT *start_point,ID2D1Ink **ink) {
    return This->lpVtbl->CreateInk(This,start_point,ink);
}
static inline HRESULT ID2D1DeviceContext5_CreateInkStyle(ID2D1DeviceContext5* This,const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,ID2D1InkStyle **ink_style) {
    return This->lpVtbl->CreateInkStyle(This,ink_style_properties,ink_style);
}
static inline HRESULT ID2D1DeviceContext5_CreateGradientMesh(ID2D1DeviceContext5* This,const D2D1_GRADIENT_MESH_PATCH *patches,UINT32 patches_count,ID2D1GradientMesh **gradient_mesh) {
    return This->lpVtbl->CreateGradientMesh(This,patches,patches_count,gradient_mesh);
}
static inline HRESULT ID2D1DeviceContext5_CreateImageSourceFromWic(ID2D1DeviceContext5* This,IWICBitmapSource *wic_bitmap_source,D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,D2D1_ALPHA_MODE alpha_mode,ID2D1ImageSourceFromWic **image_source) {
    return This->lpVtbl->CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source);
}
static inline HRESULT ID2D1DeviceContext5_CreateLookupTable3D(ID2D1DeviceContext5* This,D2D1_BUFFER_PRECISION precision,const UINT32 *extents,const BYTE *data,UINT32 data_count,const UINT32 *strides,ID2D1LookupTable3D **lookup_table) {
    return This->lpVtbl->CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table);
}
static inline HRESULT ID2D1DeviceContext5_CreateImageSourceFromDxgi(ID2D1DeviceContext5* This,IDXGISurface **surfaces,UINT32 surface_count,DXGI_COLOR_SPACE_TYPE color_space,D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,ID2D1ImageSource **image_source) {
    return This->lpVtbl->CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source);
}
static inline HRESULT ID2D1DeviceContext5_GetGradientMeshWorldBounds(ID2D1DeviceContext5* This,ID2D1GradientMesh *gradient_mesh,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGradientMeshWorldBounds(This,gradient_mesh,bounds);
}
static inline void ID2D1DeviceContext5_DrawInk(ID2D1DeviceContext5* This,ID2D1Ink *ink,ID2D1Brush *brush,ID2D1InkStyle *ink_style) {
    This->lpVtbl->DrawInk(This,ink,brush,ink_style);
}
static inline void ID2D1DeviceContext5_DrawGradientMesh(ID2D1DeviceContext5* This,ID2D1GradientMesh *gradient_mesh) {
    This->lpVtbl->DrawGradientMesh(This,gradient_mesh);
}
static inline void ID2D1DeviceContext5_DrawGdiMetafile(ID2D1DeviceContext5* This,ID2D1GdiMetafile *gdi_metafile,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect);
}
static inline HRESULT ID2D1DeviceContext5_CreateTransformedImageSource(ID2D1DeviceContext5* This,ID2D1ImageSource *source,const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,ID2D1TransformedImageSource **transformed) {
    return This->lpVtbl->CreateTransformedImageSource(This,source,props,transformed);
}
/*** ID2D1DeviceContext3 methods ***/
static inline HRESULT ID2D1DeviceContext5_CreateSpriteBatch(ID2D1DeviceContext5* This,ID2D1SpriteBatch **sprite_batch) {
    return This->lpVtbl->CreateSpriteBatch(This,sprite_batch);
}
static inline void ID2D1DeviceContext5_DrawSpriteBatch(ID2D1DeviceContext5* This,ID2D1SpriteBatch *sprite_batch,UINT32 start_index,UINT32 sprite_count,ID2D1Bitmap *bitmap,D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,D2D1_SPRITE_OPTIONS sprite_options) {
    This->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options);
}
/*** ID2D1DeviceContext4 methods ***/
static inline HRESULT ID2D1DeviceContext5_CreateSvgGlyphStyle(ID2D1DeviceContext5* This,ID2D1SvgGlyphStyle **svg_glyph_style) {
    return This->lpVtbl->CreateSvgGlyphStyle(This,svg_glyph_style);
}
static inline void ID2D1DeviceContext5_DrawText(ID2D1DeviceContext5* This,const WCHAR *string,UINT32 string_length,IDWriteTextFormat *text_format,const D2D1_RECT_F *layout_rect,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,D2D1_DRAW_TEXT_OPTIONS options,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->ID2D1DeviceContext4_DrawText(This,string,string_length,text_format,layout_rect,default_fill_brush,svg_glyph_style,color_palette_index,options,measuring_mode);
}
static inline void ID2D1DeviceContext5_DrawTextLayout(ID2D1DeviceContext5* This,D2D1_POINT_2F origin,IDWriteTextLayout *text_layout,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,D2D1_DRAW_TEXT_OPTIONS options) {
    This->lpVtbl->ID2D1DeviceContext4_DrawTextLayout(This,origin,text_layout,default_fill_brush,svg_glyph_style,color_palette_index,options);
}
static inline void ID2D1DeviceContext5_DrawColorBitmapGlyphRun(ID2D1DeviceContext5* This,DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,DWRITE_MEASURING_MODE measuring_mode,D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION bitmap_snap_option) {
    This->lpVtbl->DrawColorBitmapGlyphRun(This,glyph_image_format,baseline_origin,glyph_run,measuring_mode,bitmap_snap_option);
}
static inline void ID2D1DeviceContext5_DrawSvgGlyphRun(ID2D1DeviceContext5* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->DrawSvgGlyphRun(This,baseline_origin,glyph_run,default_fill_brush,svg_glyph_style,color_palette_index,measuring_mode);
}
static inline HRESULT ID2D1DeviceContext5_GetColorBitmapGlyphImage(ID2D1DeviceContext5* This,DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,D2D1_POINT_2F glyph_origin,IDWriteFontFace *font_face,FLOAT font_em_size,UINT16 glyph_index,BOOL is_sideways,const D2D1_MATRIX_3X2_F *world_transform,FLOAT dpi_x,FLOAT dpi_y,D2D1_MATRIX_3X2_F *glyph_transform,ID2D1Image **glyph_image) {
    return This->lpVtbl->GetColorBitmapGlyphImage(This,glyph_image_format,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,dpi_x,dpi_y,glyph_transform,glyph_image);
}
static inline HRESULT ID2D1DeviceContext5_GetSvgGlyphImage(ID2D1DeviceContext5* This,D2D1_POINT_2F glyph_origin,IDWriteFontFace *font_face,FLOAT font_em_size,UINT16 glyph_index,BOOL is_sideways,const D2D1_MATRIX_3X2_F *world_transform,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,D2D1_MATRIX_3X2_F *glyph_transform,ID2D1CommandList **glyph_image) {
    return This->lpVtbl->GetSvgGlyphImage(This,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,default_fill_brush,svg_glyph_style,color_palette_index,glyph_transform,glyph_image);
}
/*** ID2D1DeviceContext5 methods ***/
static inline HRESULT ID2D1DeviceContext5_CreateSvgDocument(ID2D1DeviceContext5* This,IStream *input_xml_stream,D2D1_SIZE_F viewport_size,ID2D1SvgDocument **svg_document) {
    return This->lpVtbl->CreateSvgDocument(This,input_xml_stream,viewport_size,svg_document);
}
static inline void ID2D1DeviceContext5_DrawSvgDocument(ID2D1DeviceContext5* This,ID2D1SvgDocument *svg_document) {
    This->lpVtbl->DrawSvgDocument(This,svg_document);
}
static inline HRESULT ID2D1DeviceContext5_CreateColorContextFromDxgiColorSpace(ID2D1DeviceContext5* This,DXGI_COLOR_SPACE_TYPE color_space,ID2D1ColorContext1 **color_context) {
    return This->lpVtbl->CreateColorContextFromDxgiColorSpace(This,color_space,color_context);
}
static inline HRESULT ID2D1DeviceContext5_CreateColorContextFromSimpleColorProfile(ID2D1DeviceContext5* This,const D2D1_SIMPLE_COLOR_PROFILE *simple_profile,ID2D1ColorContext1 **color_context) {
    return This->lpVtbl->CreateColorContextFromSimpleColorProfile(This,simple_profile,color_context);
}
#endif
#endif

#endif


#endif  /* __ID2D1DeviceContext5_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1DeviceContext6 interface
 */
#ifndef __ID2D1DeviceContext6_INTERFACE_DEFINED__
#define __ID2D1DeviceContext6_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DeviceContext6, 0x985f7e37, 0x4ed0, 0x4a19, 0x98,0xa3, 0x15,0xb0,0xed,0xfd,0xe3,0x06);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("985f7e37-4ed0-4a19-98a3-15b0edfde306")
ID2D1DeviceContext6 : public ID2D1DeviceContext5
{
    virtual void STDMETHODCALLTYPE BlendImage(
        ID2D1Image *image,
        D2D1_BLEND_MODE blend_mode,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DeviceContext6, 0x985f7e37, 0x4ed0, 0x4a19, 0x98,0xa3, 0x15,0xb0,0xed,0xfd,0xe3,0x06)
#endif
#else
typedef struct ID2D1DeviceContext6Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1DeviceContext6 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1DeviceContext6 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1DeviceContext6 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1DeviceContext6 *This,
        ID2D1Factory **factory);

    /*** ID2D1RenderTarget methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateBitmap)(
        ID2D1DeviceContext6 *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext6 *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateSharedBitmap)(
        ID2D1DeviceContext6 *This,
        REFIID iid,
        void *data,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapBrush)(
        ID2D1DeviceContext6 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateSolidColorBrush)(
        ID2D1DeviceContext6 *This,
        const D2D1_COLOR_F *color,
        const D2D1_BRUSH_PROPERTIES *desc,
        ID2D1SolidColorBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateGradientStopCollection)(
        ID2D1DeviceContext6 *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_GAMMA gamma,
        D2D1_EXTEND_MODE extend_mode,
        ID2D1GradientStopCollection **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateLinearGradientBrush)(
        ID2D1DeviceContext6 *This,
        const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1LinearGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateRadialGradientBrush)(
        ID2D1DeviceContext6 *This,
        const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1RadialGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateCompatibleRenderTarget)(
        ID2D1DeviceContext6 *This,
        const D2D1_SIZE_F *size,
        const D2D1_SIZE_U *pixel_size,
        const D2D1_PIXEL_FORMAT *format,
        D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,
        ID2D1BitmapRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateLayer)(
        ID2D1DeviceContext6 *This,
        const D2D1_SIZE_F *size,
        ID2D1Layer **layer);

    HRESULT (STDMETHODCALLTYPE *CreateMesh)(
        ID2D1DeviceContext6 *This,
        ID2D1Mesh **mesh);

    void (STDMETHODCALLTYPE *DrawLine)(
        ID2D1DeviceContext6 *This,
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *DrawRectangle)(
        ID2D1DeviceContext6 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRectangle)(
        ID2D1DeviceContext6 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawRoundedRectangle)(
        ID2D1DeviceContext6 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRoundedRectangle)(
        ID2D1DeviceContext6 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawEllipse)(
        ID2D1DeviceContext6 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillEllipse)(
        ID2D1DeviceContext6 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawGeometry)(
        ID2D1DeviceContext6 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillGeometry)(
        ID2D1DeviceContext6 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        ID2D1Brush *opacity_brush);

    void (STDMETHODCALLTYPE *FillMesh)(
        ID2D1DeviceContext6 *This,
        ID2D1Mesh *mesh,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *FillOpacityMask)(
        ID2D1DeviceContext6 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        D2D1_OPACITY_MASK_CONTENT content,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawBitmap)(
        ID2D1DeviceContext6 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawText)(
        ID2D1DeviceContext6 *This,
        const WCHAR *string,
        UINT32 string_len,
        IDWriteTextFormat *text_format,
        const D2D1_RECT_F *layout_rect,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawTextLayout)(
        ID2D1DeviceContext6 *This,
        D2D1_POINT_2F origin,
        IDWriteTextLayout *layout,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options);

    void (STDMETHODCALLTYPE *DrawGlyphRun)(
        ID2D1DeviceContext6 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *SetTransform)(
        ID2D1DeviceContext6 *This,
        const D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *GetTransform)(
        ID2D1DeviceContext6 *This,
        D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *SetAntialiasMode)(
        ID2D1DeviceContext6 *This,
        D2D1_ANTIALIAS_MODE antialias_mode);

    D2D1_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetAntialiasMode)(
        ID2D1DeviceContext6 *This);

    void (STDMETHODCALLTYPE *SetTextAntialiasMode)(
        ID2D1DeviceContext6 *This,
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode);

    D2D1_TEXT_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetTextAntialiasMode)(
        ID2D1DeviceContext6 *This);

    void (STDMETHODCALLTYPE *SetTextRenderingParams)(
        ID2D1DeviceContext6 *This,
        IDWriteRenderingParams *text_rendering_params);

    void (STDMETHODCALLTYPE *GetTextRenderingParams)(
        ID2D1DeviceContext6 *This,
        IDWriteRenderingParams **text_rendering_params);

    void (STDMETHODCALLTYPE *SetTags)(
        ID2D1DeviceContext6 *This,
        D2D1_TAG tag1,
        D2D1_TAG tag2);

    void (STDMETHODCALLTYPE *GetTags)(
        ID2D1DeviceContext6 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *PushLayer)(
        ID2D1DeviceContext6 *This,
        const D2D1_LAYER_PARAMETERS *layer_parameters,
        ID2D1Layer *layer);

    void (STDMETHODCALLTYPE *PopLayer)(
        ID2D1DeviceContext6 *This);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        ID2D1DeviceContext6 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *SaveDrawingState)(
        ID2D1DeviceContext6 *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *RestoreDrawingState)(
        ID2D1DeviceContext6 *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *PushAxisAlignedClip)(
        ID2D1DeviceContext6 *This,
        const D2D1_RECT_F *clip_rect,
        D2D1_ANTIALIAS_MODE antialias_mode);

    void (STDMETHODCALLTYPE *PopAxisAlignedClip)(
        ID2D1DeviceContext6 *This);

    void (STDMETHODCALLTYPE *Clear)(
        ID2D1DeviceContext6 *This,
        const D2D1_COLOR_F *color);

    void (STDMETHODCALLTYPE *BeginDraw)(
        ID2D1DeviceContext6 *This);

    HRESULT (STDMETHODCALLTYPE *EndDraw)(
        ID2D1DeviceContext6 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    D2D1_PIXEL_FORMAT * (STDMETHODCALLTYPE *GetPixelFormat)(
        ID2D1DeviceContext6 *This,
        D2D1_PIXEL_FORMAT *__ret);

    void (STDMETHODCALLTYPE *SetDpi)(
        ID2D1DeviceContext6 *This,
        float dpi_x,
        float dpi_y);

    void (STDMETHODCALLTYPE *GetDpi)(
        ID2D1DeviceContext6 *This,
        float *dpi_x,
        float *dpi_y);

    D2D1_SIZE_F * (STDMETHODCALLTYPE *GetSize)(
        ID2D1DeviceContext6 *This,
        D2D1_SIZE_F *__ret);

    D2D1_SIZE_U * (STDMETHODCALLTYPE *GetPixelSize)(
        ID2D1DeviceContext6 *This,
        D2D1_SIZE_U *__ret);

    UINT32 (STDMETHODCALLTYPE *GetMaximumBitmapSize)(
        ID2D1DeviceContext6 *This);

    BOOL (STDMETHODCALLTYPE *IsSupported)(
        ID2D1DeviceContext6 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc);

    /*** ID2D1DeviceContext methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmap)(
        ID2D1DeviceContext6 *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext6 *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateColorContext)(
        ID2D1DeviceContext6 *This,
        D2D1_COLOR_SPACE space,
        const BYTE *profile,
        UINT32 profile_size,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromFilename)(
        ID2D1DeviceContext6 *This,
        const WCHAR *filename,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromWicColorContext)(
        ID2D1DeviceContext6 *This,
        IWICColorContext *wic_color_context,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromDxgiSurface)(
        ID2D1DeviceContext6 *This,
        IDXGISurface *surface,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateEffect)(
        ID2D1DeviceContext6 *This,
        REFCLSID effect_id,
        ID2D1Effect **effect);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateGradientStopCollection)(
        ID2D1DeviceContext6 *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_COLOR_SPACE preinterpolation_space,
        D2D1_COLOR_SPACE postinterpolation_space,
        D2D1_BUFFER_PRECISION buffer_precision,
        D2D1_EXTEND_MODE extend_mode,
        D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,
        ID2D1GradientStopCollection1 **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateImageBrush)(
        ID2D1DeviceContext6 *This,
        ID2D1Image *image,
        const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1ImageBrush **brush);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapBrush)(
        ID2D1DeviceContext6 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush1 **bitmap_brush);

    HRESULT (STDMETHODCALLTYPE *CreateCommandList)(
        ID2D1DeviceContext6 *This,
        ID2D1CommandList **command_list);

    BOOL (STDMETHODCALLTYPE *IsDxgiFormatSupported)(
        ID2D1DeviceContext6 *This,
        DXGI_FORMAT format);

    BOOL (STDMETHODCALLTYPE *IsBufferPrecisionSupported)(
        ID2D1DeviceContext6 *This,
        D2D1_BUFFER_PRECISION buffer_precision);

    HRESULT (STDMETHODCALLTYPE *GetImageLocalBounds)(
        ID2D1DeviceContext6 *This,
        ID2D1Image *image,
        D2D1_RECT_F *local_bounds);

    HRESULT (STDMETHODCALLTYPE *GetImageWorldBounds)(
        ID2D1DeviceContext6 *This,
        ID2D1Image *image,
        D2D1_RECT_F *world_bounds);

    HRESULT (STDMETHODCALLTYPE *GetGlyphRunWorldBounds)(
        ID2D1DeviceContext6 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *GetDevice)(
        ID2D1DeviceContext6 *This,
        ID2D1Device **device);

    void (STDMETHODCALLTYPE *SetTarget)(
        ID2D1DeviceContext6 *This,
        ID2D1Image *target);

    void (STDMETHODCALLTYPE *GetTarget)(
        ID2D1DeviceContext6 *This,
        ID2D1Image **target);

    void (STDMETHODCALLTYPE *SetRenderingControls)(
        ID2D1DeviceContext6 *This,
        const D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *GetRenderingControls)(
        ID2D1DeviceContext6 *This,
        D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *SetPrimitiveBlend)(
        ID2D1DeviceContext6 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    D2D1_PRIMITIVE_BLEND (STDMETHODCALLTYPE *GetPrimitiveBlend)(
        ID2D1DeviceContext6 *This);

    void (STDMETHODCALLTYPE *SetUnitMode)(
        ID2D1DeviceContext6 *This,
        D2D1_UNIT_MODE unit_mode);

    D2D1_UNIT_MODE (STDMETHODCALLTYPE *GetUnitMode)(
        ID2D1DeviceContext6 *This);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawGlyphRun)(
        ID2D1DeviceContext6 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawImage)(
        ID2D1DeviceContext6 *This,
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode);

    void (STDMETHODCALLTYPE *DrawGdiMetafile)(
        ID2D1DeviceContext6 *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawBitmap)(
        ID2D1DeviceContext6 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_PushLayer)(
        ID2D1DeviceContext6 *This,
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer);

    HRESULT (STDMETHODCALLTYPE *InvalidateEffectInputRectangle)(
        ID2D1DeviceContext6 *This,
        ID2D1Effect *effect,
        UINT32 input,
        const D2D1_RECT_F *input_rect);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangleCount)(
        ID2D1DeviceContext6 *This,
        ID2D1Effect *effect,
        UINT32 *rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangles)(
        ID2D1DeviceContext6 *This,
        ID2D1Effect *effect,
        D2D1_RECT_F *rectangles,
        UINT32 rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectRequiredInputRectangles)(
        ID2D1DeviceContext6 *This,
        ID2D1Effect *effect,
        const D2D1_RECT_F *image_rect,
        const D2D1_EFFECT_INPUT_DESCRIPTION *desc,
        D2D1_RECT_F *input_rect,
        UINT32 input_count);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_FillOpacityMask)(
        ID2D1DeviceContext6 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    /*** ID2D1DeviceContext1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateFilledGeometryRealization)(
        ID2D1DeviceContext6 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        ID2D1GeometryRealization **realization);

    HRESULT (STDMETHODCALLTYPE *CreateStrokedGeometryRealization)(
        ID2D1DeviceContext6 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        ID2D1GeometryRealization **realization);

    void (STDMETHODCALLTYPE *DrawGeometryRealization)(
        ID2D1DeviceContext6 *This,
        ID2D1GeometryRealization *realization,
        ID2D1Brush *brush);

    /*** ID2D1DeviceContext2 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateInk)(
        ID2D1DeviceContext6 *This,
        const D2D1_INK_POINT *start_point,
        ID2D1Ink **ink);

    HRESULT (STDMETHODCALLTYPE *CreateInkStyle)(
        ID2D1DeviceContext6 *This,
        const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,
        ID2D1InkStyle **ink_style);

    HRESULT (STDMETHODCALLTYPE *CreateGradientMesh)(
        ID2D1DeviceContext6 *This,
        const D2D1_GRADIENT_MESH_PATCH *patches,
        UINT32 patches_count,
        ID2D1GradientMesh **gradient_mesh);

    HRESULT (STDMETHODCALLTYPE *CreateImageSourceFromWic)(
        ID2D1DeviceContext6 *This,
        IWICBitmapSource *wic_bitmap_source,
        D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,
        D2D1_ALPHA_MODE alpha_mode,
        ID2D1ImageSourceFromWic **image_source);

    HRESULT (STDMETHODCALLTYPE *CreateLookupTable3D)(
        ID2D1DeviceContext6 *This,
        D2D1_BUFFER_PRECISION precision,
        const UINT32 *extents,
        const BYTE *data,
        UINT32 data_count,
        const UINT32 *strides,
        ID2D1LookupTable3D **lookup_table);

    HRESULT (STDMETHODCALLTYPE *CreateImageSourceFromDxgi)(
        ID2D1DeviceContext6 *This,
        IDXGISurface **surfaces,
        UINT32 surface_count,
        DXGI_COLOR_SPACE_TYPE color_space,
        D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,
        ID2D1ImageSource **image_source);

    HRESULT (STDMETHODCALLTYPE *GetGradientMeshWorldBounds)(
        ID2D1DeviceContext6 *This,
        ID2D1GradientMesh *gradient_mesh,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *DrawInk)(
        ID2D1DeviceContext6 *This,
        ID2D1Ink *ink,
        ID2D1Brush *brush,
        ID2D1InkStyle *ink_style);

    void (STDMETHODCALLTYPE *DrawGradientMesh)(
        ID2D1DeviceContext6 *This,
        ID2D1GradientMesh *gradient_mesh);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext2_DrawGdiMetafile)(
        ID2D1DeviceContext6 *This,
        ID2D1GdiMetafile *gdi_metafile,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedImageSource)(
        ID2D1DeviceContext6 *This,
        ID2D1ImageSource *source,
        const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,
        ID2D1TransformedImageSource **transformed);

    /*** ID2D1DeviceContext3 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSpriteBatch)(
        ID2D1DeviceContext6 *This,
        ID2D1SpriteBatch **sprite_batch);

    void (STDMETHODCALLTYPE *DrawSpriteBatch)(
        ID2D1DeviceContext6 *This,
        ID2D1SpriteBatch *sprite_batch,
        UINT32 start_index,
        UINT32 sprite_count,
        ID2D1Bitmap *bitmap,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        D2D1_SPRITE_OPTIONS sprite_options);

    /*** ID2D1DeviceContext4 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSvgGlyphStyle)(
        ID2D1DeviceContext6 *This,
        ID2D1SvgGlyphStyle **svg_glyph_style);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext4_DrawText)(
        ID2D1DeviceContext6 *This,
        const WCHAR *string,
        UINT32 string_length,
        IDWriteTextFormat *text_format,
        const D2D1_RECT_F *layout_rect,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_DRAW_TEXT_OPTIONS options,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext4_DrawTextLayout)(
        ID2D1DeviceContext6 *This,
        D2D1_POINT_2F origin,
        IDWriteTextLayout *text_layout,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_DRAW_TEXT_OPTIONS options);

    void (STDMETHODCALLTYPE *DrawColorBitmapGlyphRun)(
        ID2D1DeviceContext6 *This,
        DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION bitmap_snap_option);

    void (STDMETHODCALLTYPE *DrawSvgGlyphRun)(
        ID2D1DeviceContext6 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        DWRITE_MEASURING_MODE measuring_mode);

    HRESULT (STDMETHODCALLTYPE *GetColorBitmapGlyphImage)(
        ID2D1DeviceContext6 *This,
        DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,
        D2D1_POINT_2F glyph_origin,
        IDWriteFontFace *font_face,
        FLOAT font_em_size,
        UINT16 glyph_index,
        BOOL is_sideways,
        const D2D1_MATRIX_3X2_F *world_transform,
        FLOAT dpi_x,
        FLOAT dpi_y,
        D2D1_MATRIX_3X2_F *glyph_transform,
        ID2D1Image **glyph_image);

    HRESULT (STDMETHODCALLTYPE *GetSvgGlyphImage)(
        ID2D1DeviceContext6 *This,
        D2D1_POINT_2F glyph_origin,
        IDWriteFontFace *font_face,
        FLOAT font_em_size,
        UINT16 glyph_index,
        BOOL is_sideways,
        const D2D1_MATRIX_3X2_F *world_transform,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_MATRIX_3X2_F *glyph_transform,
        ID2D1CommandList **glyph_image);

    /*** ID2D1DeviceContext5 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSvgDocument)(
        ID2D1DeviceContext6 *This,
        IStream *input_xml_stream,
        D2D1_SIZE_F viewport_size,
        ID2D1SvgDocument **svg_document);

    void (STDMETHODCALLTYPE *DrawSvgDocument)(
        ID2D1DeviceContext6 *This,
        ID2D1SvgDocument *svg_document);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromDxgiColorSpace)(
        ID2D1DeviceContext6 *This,
        DXGI_COLOR_SPACE_TYPE color_space,
        ID2D1ColorContext1 **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromSimpleColorProfile)(
        ID2D1DeviceContext6 *This,
        const D2D1_SIMPLE_COLOR_PROFILE *simple_profile,
        ID2D1ColorContext1 **color_context);

    /*** ID2D1DeviceContext6 methods ***/
    void (STDMETHODCALLTYPE *BlendImage)(
        ID2D1DeviceContext6 *This,
        ID2D1Image *image,
        D2D1_BLEND_MODE blend_mode,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode);

    END_INTERFACE
} ID2D1DeviceContext6Vtbl;

interface ID2D1DeviceContext6 {
    CONST_VTBL ID2D1DeviceContext6Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DeviceContext6_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DeviceContext6_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DeviceContext6_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1DeviceContext6_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1RenderTarget methods ***/
#define ID2D1DeviceContext6_CreateSharedBitmap(This,iid,data,desc,bitmap) (This)->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap)
#define ID2D1DeviceContext6_CreateSolidColorBrush(This,color,desc,brush) (This)->lpVtbl->CreateSolidColorBrush(This,color,desc,brush)
#define ID2D1DeviceContext6_CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext6_CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext6_CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target) (This)->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target)
#define ID2D1DeviceContext6_CreateLayer(This,size,layer) (This)->lpVtbl->CreateLayer(This,size,layer)
#define ID2D1DeviceContext6_CreateMesh(This,mesh) (This)->lpVtbl->CreateMesh(This,mesh)
#define ID2D1DeviceContext6_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext6_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext6_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1DeviceContext6_DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext6_FillRoundedRectangle(This,rect,brush) (This)->lpVtbl->FillRoundedRectangle(This,rect,brush)
#define ID2D1DeviceContext6_DrawEllipse(This,ellipse,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext6_FillEllipse(This,ellipse,brush) (This)->lpVtbl->FillEllipse(This,ellipse,brush)
#define ID2D1DeviceContext6_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext6_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1DeviceContext6_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1DeviceContext6_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1DeviceContext6_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#define ID2D1DeviceContext6_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext6_GetAntialiasMode(This) (This)->lpVtbl->GetAntialiasMode(This)
#define ID2D1DeviceContext6_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext6_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
#define ID2D1DeviceContext6_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext6_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext6_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1DeviceContext6_GetTags(This,tag1,tag2) (This)->lpVtbl->GetTags(This,tag1,tag2)
#define ID2D1DeviceContext6_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#define ID2D1DeviceContext6_Flush(This,tag1,tag2) (This)->lpVtbl->Flush(This,tag1,tag2)
#define ID2D1DeviceContext6_SaveDrawingState(This,state_block) (This)->lpVtbl->SaveDrawingState(This,state_block)
#define ID2D1DeviceContext6_RestoreDrawingState(This,state_block) (This)->lpVtbl->RestoreDrawingState(This,state_block)
#define ID2D1DeviceContext6_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1DeviceContext6_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1DeviceContext6_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1DeviceContext6_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1DeviceContext6_EndDraw(This,tag1,tag2) (This)->lpVtbl->EndDraw(This,tag1,tag2)
#define ID2D1DeviceContext6_GetPixelFormat(This) ID2D1DeviceContext6_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext6_SetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->SetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext6_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext6_GetSize(This) ID2D1DeviceContext6_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext6_GetPixelSize(This) ID2D1DeviceContext6_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext6_GetMaximumBitmapSize(This) (This)->lpVtbl->GetMaximumBitmapSize(This)
#define ID2D1DeviceContext6_IsSupported(This,desc) (This)->lpVtbl->IsSupported(This,desc)
/*** ID2D1DeviceContext methods ***/
#define ID2D1DeviceContext6_CreateBitmap(This,size,src_data,pitch,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap)
#define ID2D1DeviceContext6_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap)
#define ID2D1DeviceContext6_CreateColorContext(This,space,profile,profile_size,color_context) (This)->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context)
#define ID2D1DeviceContext6_CreateColorContextFromFilename(This,filename,color_context) (This)->lpVtbl->CreateColorContextFromFilename(This,filename,color_context)
#define ID2D1DeviceContext6_CreateColorContextFromWicColorContext(This,wic_color_context,color_context) (This)->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context)
#define ID2D1DeviceContext6_CreateBitmapFromDxgiSurface(This,surface,desc,bitmap) (This)->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap)
#define ID2D1DeviceContext6_CreateEffect(This,effect_id,effect) (This)->lpVtbl->CreateEffect(This,effect_id,effect)
#define ID2D1DeviceContext6_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient) (This)->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient)
#define ID2D1DeviceContext6_CreateImageBrush(This,image,image_brush_desc,brush_desc,brush) (This)->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush)
#define ID2D1DeviceContext6_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush)
#define ID2D1DeviceContext6_CreateCommandList(This,command_list) (This)->lpVtbl->CreateCommandList(This,command_list)
#define ID2D1DeviceContext6_IsDxgiFormatSupported(This,format) (This)->lpVtbl->IsDxgiFormatSupported(This,format)
#define ID2D1DeviceContext6_IsBufferPrecisionSupported(This,buffer_precision) (This)->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision)
#define ID2D1DeviceContext6_GetImageLocalBounds(This,image,local_bounds) (This)->lpVtbl->GetImageLocalBounds(This,image,local_bounds)
#define ID2D1DeviceContext6_GetImageWorldBounds(This,image,world_bounds) (This)->lpVtbl->GetImageWorldBounds(This,image,world_bounds)
#define ID2D1DeviceContext6_GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds) (This)->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds)
#define ID2D1DeviceContext6_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define ID2D1DeviceContext6_SetTarget(This,target) (This)->lpVtbl->SetTarget(This,target)
#define ID2D1DeviceContext6_GetTarget(This,target) (This)->lpVtbl->GetTarget(This,target)
#define ID2D1DeviceContext6_SetRenderingControls(This,rendering_controls) (This)->lpVtbl->SetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext6_GetRenderingControls(This,rendering_controls) (This)->lpVtbl->GetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext6_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1DeviceContext6_GetPrimitiveBlend(This) (This)->lpVtbl->GetPrimitiveBlend(This)
#define ID2D1DeviceContext6_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1DeviceContext6_GetUnitMode(This) (This)->lpVtbl->GetUnitMode(This)
#define ID2D1DeviceContext6_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode) (This)->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode)
#define ID2D1DeviceContext6_DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode) (This)->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode)
#define ID2D1DeviceContext6_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform) (This)->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform)
#define ID2D1DeviceContext6_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer)
#define ID2D1DeviceContext6_InvalidateEffectInputRectangle(This,effect,input,input_rect) (This)->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect)
#define ID2D1DeviceContext6_GetEffectInvalidRectangleCount(This,effect,rect_count) (This)->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count)
#define ID2D1DeviceContext6_GetEffectInvalidRectangles(This,effect,rectangles,rect_count) (This)->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count)
#define ID2D1DeviceContext6_GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count) (This)->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count)
#define ID2D1DeviceContext6_FillOpacityMask(This,mask,brush,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect)
/*** ID2D1DeviceContext1 methods ***/
#define ID2D1DeviceContext6_CreateFilledGeometryRealization(This,geometry,tolerance,realization) (This)->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization)
#define ID2D1DeviceContext6_CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization) (This)->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization)
#define ID2D1DeviceContext6_DrawGeometryRealization(This,realization,brush) (This)->lpVtbl->DrawGeometryRealization(This,realization,brush)
/*** ID2D1DeviceContext2 methods ***/
#define ID2D1DeviceContext6_CreateInk(This,start_point,ink) (This)->lpVtbl->CreateInk(This,start_point,ink)
#define ID2D1DeviceContext6_CreateInkStyle(This,ink_style_properties,ink_style) (This)->lpVtbl->CreateInkStyle(This,ink_style_properties,ink_style)
#define ID2D1DeviceContext6_CreateGradientMesh(This,patches,patches_count,gradient_mesh) (This)->lpVtbl->CreateGradientMesh(This,patches,patches_count,gradient_mesh)
#define ID2D1DeviceContext6_CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source) (This)->lpVtbl->CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source)
#define ID2D1DeviceContext6_CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table) (This)->lpVtbl->CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table)
#define ID2D1DeviceContext6_CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source) (This)->lpVtbl->CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source)
#define ID2D1DeviceContext6_GetGradientMeshWorldBounds(This,gradient_mesh,bounds) (This)->lpVtbl->GetGradientMeshWorldBounds(This,gradient_mesh,bounds)
#define ID2D1DeviceContext6_DrawInk(This,ink,brush,ink_style) (This)->lpVtbl->DrawInk(This,ink,brush,ink_style)
#define ID2D1DeviceContext6_DrawGradientMesh(This,gradient_mesh) (This)->lpVtbl->DrawGradientMesh(This,gradient_mesh)
#define ID2D1DeviceContext6_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect)
#define ID2D1DeviceContext6_CreateTransformedImageSource(This,source,props,transformed) (This)->lpVtbl->CreateTransformedImageSource(This,source,props,transformed)
/*** ID2D1DeviceContext3 methods ***/
#define ID2D1DeviceContext6_CreateSpriteBatch(This,sprite_batch) (This)->lpVtbl->CreateSpriteBatch(This,sprite_batch)
#define ID2D1DeviceContext6_DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options) (This)->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options)
/*** ID2D1DeviceContext4 methods ***/
#define ID2D1DeviceContext6_CreateSvgGlyphStyle(This,svg_glyph_style) (This)->lpVtbl->CreateSvgGlyphStyle(This,svg_glyph_style)
#define ID2D1DeviceContext6_DrawText(This,string,string_length,text_format,layout_rect,default_fill_brush,svg_glyph_style,color_palette_index,options,measuring_mode) (This)->lpVtbl->ID2D1DeviceContext4_DrawText(This,string,string_length,text_format,layout_rect,default_fill_brush,svg_glyph_style,color_palette_index,options,measuring_mode)
#define ID2D1DeviceContext6_DrawTextLayout(This,origin,text_layout,default_fill_brush,svg_glyph_style,color_palette_index,options) (This)->lpVtbl->ID2D1DeviceContext4_DrawTextLayout(This,origin,text_layout,default_fill_brush,svg_glyph_style,color_palette_index,options)
#define ID2D1DeviceContext6_DrawColorBitmapGlyphRun(This,glyph_image_format,baseline_origin,glyph_run,measuring_mode,bitmap_snap_option) (This)->lpVtbl->DrawColorBitmapGlyphRun(This,glyph_image_format,baseline_origin,glyph_run,measuring_mode,bitmap_snap_option)
#define ID2D1DeviceContext6_DrawSvgGlyphRun(This,baseline_origin,glyph_run,default_fill_brush,svg_glyph_style,color_palette_index,measuring_mode) (This)->lpVtbl->DrawSvgGlyphRun(This,baseline_origin,glyph_run,default_fill_brush,svg_glyph_style,color_palette_index,measuring_mode)
#define ID2D1DeviceContext6_GetColorBitmapGlyphImage(This,glyph_image_format,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,dpi_x,dpi_y,glyph_transform,glyph_image) (This)->lpVtbl->GetColorBitmapGlyphImage(This,glyph_image_format,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,dpi_x,dpi_y,glyph_transform,glyph_image)
#define ID2D1DeviceContext6_GetSvgGlyphImage(This,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,default_fill_brush,svg_glyph_style,color_palette_index,glyph_transform,glyph_image) (This)->lpVtbl->GetSvgGlyphImage(This,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,default_fill_brush,svg_glyph_style,color_palette_index,glyph_transform,glyph_image)
/*** ID2D1DeviceContext5 methods ***/
#define ID2D1DeviceContext6_CreateSvgDocument(This,input_xml_stream,viewport_size,svg_document) (This)->lpVtbl->CreateSvgDocument(This,input_xml_stream,viewport_size,svg_document)
#define ID2D1DeviceContext6_DrawSvgDocument(This,svg_document) (This)->lpVtbl->DrawSvgDocument(This,svg_document)
#define ID2D1DeviceContext6_CreateColorContextFromDxgiColorSpace(This,color_space,color_context) (This)->lpVtbl->CreateColorContextFromDxgiColorSpace(This,color_space,color_context)
#define ID2D1DeviceContext6_CreateColorContextFromSimpleColorProfile(This,simple_profile,color_context) (This)->lpVtbl->CreateColorContextFromSimpleColorProfile(This,simple_profile,color_context)
/*** ID2D1DeviceContext6 methods ***/
#define ID2D1DeviceContext6_BlendImage(This,image,blend_mode,target_offset,image_rect,interpolation_mode) (This)->lpVtbl->BlendImage(This,image,blend_mode,target_offset,image_rect,interpolation_mode)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1DeviceContext6_QueryInterface(ID2D1DeviceContext6* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1DeviceContext6_AddRef(ID2D1DeviceContext6* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1DeviceContext6_Release(ID2D1DeviceContext6* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1DeviceContext6_GetFactory(ID2D1DeviceContext6* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1RenderTarget methods ***/
static inline HRESULT ID2D1DeviceContext6_CreateSharedBitmap(ID2D1DeviceContext6* This,REFIID iid,void *data,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext6_CreateSolidColorBrush(ID2D1DeviceContext6* This,const D2D1_COLOR_F *color,const D2D1_BRUSH_PROPERTIES *desc,ID2D1SolidColorBrush **brush) {
    return This->lpVtbl->CreateSolidColorBrush(This,color,desc,brush);
}
static inline HRESULT ID2D1DeviceContext6_CreateLinearGradientBrush(ID2D1DeviceContext6* This,const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1LinearGradientBrush **brush) {
    return This->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext6_CreateRadialGradientBrush(ID2D1DeviceContext6* This,const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1RadialGradientBrush **brush) {
    return This->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext6_CreateCompatibleRenderTarget(ID2D1DeviceContext6* This,const D2D1_SIZE_F *size,const D2D1_SIZE_U *pixel_size,const D2D1_PIXEL_FORMAT *format,D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,ID2D1BitmapRenderTarget **render_target) {
    return This->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target);
}
static inline HRESULT ID2D1DeviceContext6_CreateLayer(ID2D1DeviceContext6* This,const D2D1_SIZE_F *size,ID2D1Layer **layer) {
    return This->lpVtbl->CreateLayer(This,size,layer);
}
static inline HRESULT ID2D1DeviceContext6_CreateMesh(ID2D1DeviceContext6* This,ID2D1Mesh **mesh) {
    return This->lpVtbl->CreateMesh(This,mesh);
}
static inline void ID2D1DeviceContext6_DrawLine(ID2D1DeviceContext6* This,D2D1_POINT_2F p0,D2D1_POINT_2F p1,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext6_DrawRectangle(ID2D1DeviceContext6* This,const D2D1_RECT_F *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext6_FillRectangle(ID2D1DeviceContext6* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext6_DrawRoundedRectangle(ID2D1DeviceContext6* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext6_FillRoundedRectangle(ID2D1DeviceContext6* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRoundedRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext6_DrawEllipse(ID2D1DeviceContext6* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext6_FillEllipse(ID2D1DeviceContext6* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush) {
    This->lpVtbl->FillEllipse(This,ellipse,brush);
}
static inline void ID2D1DeviceContext6_DrawGeometry(ID2D1DeviceContext6* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext6_FillGeometry(ID2D1DeviceContext6* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline void ID2D1DeviceContext6_FillMesh(ID2D1DeviceContext6* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline void ID2D1DeviceContext6_SetTransform(ID2D1DeviceContext6* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static inline void ID2D1DeviceContext6_GetTransform(ID2D1DeviceContext6* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
static inline void ID2D1DeviceContext6_SetAntialiasMode(ID2D1DeviceContext6* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline D2D1_ANTIALIAS_MODE ID2D1DeviceContext6_GetAntialiasMode(ID2D1DeviceContext6* This) {
    return This->lpVtbl->GetAntialiasMode(This);
}
static inline void ID2D1DeviceContext6_SetTextAntialiasMode(ID2D1DeviceContext6* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline D2D1_TEXT_ANTIALIAS_MODE ID2D1DeviceContext6_GetTextAntialiasMode(ID2D1DeviceContext6* This) {
    return This->lpVtbl->GetTextAntialiasMode(This);
}
static inline void ID2D1DeviceContext6_SetTextRenderingParams(ID2D1DeviceContext6* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext6_GetTextRenderingParams(ID2D1DeviceContext6* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext6_SetTags(ID2D1DeviceContext6* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext6_GetTags(ID2D1DeviceContext6* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    This->lpVtbl->GetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext6_PopLayer(ID2D1DeviceContext6* This) {
    This->lpVtbl->PopLayer(This);
}
static inline HRESULT ID2D1DeviceContext6_Flush(ID2D1DeviceContext6* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->Flush(This,tag1,tag2);
}
static inline void ID2D1DeviceContext6_SaveDrawingState(ID2D1DeviceContext6* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->SaveDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext6_RestoreDrawingState(ID2D1DeviceContext6* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->RestoreDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext6_PushAxisAlignedClip(ID2D1DeviceContext6* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline void ID2D1DeviceContext6_PopAxisAlignedClip(ID2D1DeviceContext6* This) {
    This->lpVtbl->PopAxisAlignedClip(This);
}
static inline void ID2D1DeviceContext6_Clear(ID2D1DeviceContext6* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->Clear(This,color);
}
static inline void ID2D1DeviceContext6_BeginDraw(ID2D1DeviceContext6* This) {
    This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1DeviceContext6_EndDraw(ID2D1DeviceContext6* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->EndDraw(This,tag1,tag2);
}
static inline D2D1_PIXEL_FORMAT ID2D1DeviceContext6_GetPixelFormat(ID2D1DeviceContext6* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static inline void ID2D1DeviceContext6_SetDpi(ID2D1DeviceContext6* This,float dpi_x,float dpi_y) {
    This->lpVtbl->SetDpi(This,dpi_x,dpi_y);
}
static inline void ID2D1DeviceContext6_GetDpi(ID2D1DeviceContext6* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static inline D2D1_SIZE_F ID2D1DeviceContext6_GetSize(ID2D1DeviceContext6* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static inline D2D1_SIZE_U ID2D1DeviceContext6_GetPixelSize(ID2D1DeviceContext6* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static inline UINT32 ID2D1DeviceContext6_GetMaximumBitmapSize(ID2D1DeviceContext6* This) {
    return This->lpVtbl->GetMaximumBitmapSize(This);
}
static inline BOOL ID2D1DeviceContext6_IsSupported(ID2D1DeviceContext6* This,const D2D1_RENDER_TARGET_PROPERTIES *desc) {
    return This->lpVtbl->IsSupported(This,desc);
}
/*** ID2D1DeviceContext methods ***/
static inline HRESULT ID2D1DeviceContext6_CreateBitmap(ID2D1DeviceContext6* This,D2D1_SIZE_U size,const void *src_data,UINT32 pitch,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext6_CreateBitmapFromWicBitmap(ID2D1DeviceContext6* This,IWICBitmapSource *bitmap_source,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext6_CreateColorContext(ID2D1DeviceContext6* This,D2D1_COLOR_SPACE space,const BYTE *profile,UINT32 profile_size,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context);
}
static inline HRESULT ID2D1DeviceContext6_CreateColorContextFromFilename(ID2D1DeviceContext6* This,const WCHAR *filename,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromFilename(This,filename,color_context);
}
static inline HRESULT ID2D1DeviceContext6_CreateColorContextFromWicColorContext(ID2D1DeviceContext6* This,IWICColorContext *wic_color_context,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context);
}
static inline HRESULT ID2D1DeviceContext6_CreateBitmapFromDxgiSurface(ID2D1DeviceContext6* This,IDXGISurface *surface,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext6_CreateEffect(ID2D1DeviceContext6* This,REFCLSID effect_id,ID2D1Effect **effect) {
    return This->lpVtbl->CreateEffect(This,effect_id,effect);
}
static inline HRESULT ID2D1DeviceContext6_CreateGradientStopCollection(ID2D1DeviceContext6* This,const D2D1_GRADIENT_STOP *stops,UINT32 stop_count,D2D1_COLOR_SPACE preinterpolation_space,D2D1_COLOR_SPACE postinterpolation_space,D2D1_BUFFER_PRECISION buffer_precision,D2D1_EXTEND_MODE extend_mode,D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,ID2D1GradientStopCollection1 **gradient) {
    return This->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient);
}
static inline HRESULT ID2D1DeviceContext6_CreateImageBrush(ID2D1DeviceContext6* This,ID2D1Image *image,const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1ImageBrush **brush) {
    return This->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush);
}
static inline HRESULT ID2D1DeviceContext6_CreateBitmapBrush(ID2D1DeviceContext6* This,ID2D1Bitmap *bitmap,const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1BitmapBrush1 **bitmap_brush) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush);
}
static inline HRESULT ID2D1DeviceContext6_CreateCommandList(ID2D1DeviceContext6* This,ID2D1CommandList **command_list) {
    return This->lpVtbl->CreateCommandList(This,command_list);
}
static inline BOOL ID2D1DeviceContext6_IsDxgiFormatSupported(ID2D1DeviceContext6* This,DXGI_FORMAT format) {
    return This->lpVtbl->IsDxgiFormatSupported(This,format);
}
static inline BOOL ID2D1DeviceContext6_IsBufferPrecisionSupported(ID2D1DeviceContext6* This,D2D1_BUFFER_PRECISION buffer_precision) {
    return This->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision);
}
static inline HRESULT ID2D1DeviceContext6_GetImageLocalBounds(ID2D1DeviceContext6* This,ID2D1Image *image,D2D1_RECT_F *local_bounds) {
    return This->lpVtbl->GetImageLocalBounds(This,image,local_bounds);
}
static inline HRESULT ID2D1DeviceContext6_GetImageWorldBounds(ID2D1DeviceContext6* This,ID2D1Image *image,D2D1_RECT_F *world_bounds) {
    return This->lpVtbl->GetImageWorldBounds(This,image,world_bounds);
}
static inline HRESULT ID2D1DeviceContext6_GetGlyphRunWorldBounds(ID2D1DeviceContext6* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,DWRITE_MEASURING_MODE measuring_mode,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds);
}
static inline void ID2D1DeviceContext6_GetDevice(ID2D1DeviceContext6* This,ID2D1Device **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline void ID2D1DeviceContext6_SetTarget(ID2D1DeviceContext6* This,ID2D1Image *target) {
    This->lpVtbl->SetTarget(This,target);
}
static inline void ID2D1DeviceContext6_GetTarget(ID2D1DeviceContext6* This,ID2D1Image **target) {
    This->lpVtbl->GetTarget(This,target);
}
static inline void ID2D1DeviceContext6_SetRenderingControls(ID2D1DeviceContext6* This,const D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->SetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext6_GetRenderingControls(ID2D1DeviceContext6* This,D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->GetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext6_SetPrimitiveBlend(ID2D1DeviceContext6* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline D2D1_PRIMITIVE_BLEND ID2D1DeviceContext6_GetPrimitiveBlend(ID2D1DeviceContext6* This) {
    return This->lpVtbl->GetPrimitiveBlend(This);
}
static inline void ID2D1DeviceContext6_SetUnitMode(ID2D1DeviceContext6* This,D2D1_UNIT_MODE unit_mode) {
    This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline D2D1_UNIT_MODE ID2D1DeviceContext6_GetUnitMode(ID2D1DeviceContext6* This) {
    return This->lpVtbl->GetUnitMode(This);
}
static inline void ID2D1DeviceContext6_DrawGlyphRun(ID2D1DeviceContext6* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode);
}
static inline void ID2D1DeviceContext6_DrawImage(ID2D1DeviceContext6* This,ID2D1Image *image,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode,D2D1_COMPOSITE_MODE composite_mode) {
    This->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode);
}
static inline void ID2D1DeviceContext6_DrawBitmap(ID2D1DeviceContext6* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect,const D2D1_MATRIX_4X4_F *perspective_transform) {
    This->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform);
}
static inline void ID2D1DeviceContext6_PushLayer(ID2D1DeviceContext6* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    This->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1DeviceContext6_InvalidateEffectInputRectangle(ID2D1DeviceContext6* This,ID2D1Effect *effect,UINT32 input,const D2D1_RECT_F *input_rect) {
    return This->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect);
}
static inline HRESULT ID2D1DeviceContext6_GetEffectInvalidRectangleCount(ID2D1DeviceContext6* This,ID2D1Effect *effect,UINT32 *rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count);
}
static inline HRESULT ID2D1DeviceContext6_GetEffectInvalidRectangles(ID2D1DeviceContext6* This,ID2D1Effect *effect,D2D1_RECT_F *rectangles,UINT32 rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count);
}
static inline HRESULT ID2D1DeviceContext6_GetEffectRequiredInputRectangles(ID2D1DeviceContext6* This,ID2D1Effect *effect,const D2D1_RECT_F *image_rect,const D2D1_EFFECT_INPUT_DESCRIPTION *desc,D2D1_RECT_F *input_rect,UINT32 input_count) {
    return This->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count);
}
static inline void ID2D1DeviceContext6_FillOpacityMask(ID2D1DeviceContext6* This,ID2D1Bitmap *mask,ID2D1Brush *brush,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect);
}
/*** ID2D1DeviceContext1 methods ***/
static inline HRESULT ID2D1DeviceContext6_CreateFilledGeometryRealization(ID2D1DeviceContext6* This,ID2D1Geometry *geometry,float tolerance,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization);
}
static inline HRESULT ID2D1DeviceContext6_CreateStrokedGeometryRealization(ID2D1DeviceContext6* This,ID2D1Geometry *geometry,float tolerance,float stroke_width,ID2D1StrokeStyle *stroke_style,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization);
}
static inline void ID2D1DeviceContext6_DrawGeometryRealization(ID2D1DeviceContext6* This,ID2D1GeometryRealization *realization,ID2D1Brush *brush) {
    This->lpVtbl->DrawGeometryRealization(This,realization,brush);
}
/*** ID2D1DeviceContext2 methods ***/
static inline HRESULT ID2D1DeviceContext6_CreateInk(ID2D1DeviceContext6* This,const D2D1_INK_POINT *start_point,ID2D1Ink **ink) {
    return This->lpVtbl->CreateInk(This,start_point,ink);
}
static inline HRESULT ID2D1DeviceContext6_CreateInkStyle(ID2D1DeviceContext6* This,const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,ID2D1InkStyle **ink_style) {
    return This->lpVtbl->CreateInkStyle(This,ink_style_properties,ink_style);
}
static inline HRESULT ID2D1DeviceContext6_CreateGradientMesh(ID2D1DeviceContext6* This,const D2D1_GRADIENT_MESH_PATCH *patches,UINT32 patches_count,ID2D1GradientMesh **gradient_mesh) {
    return This->lpVtbl->CreateGradientMesh(This,patches,patches_count,gradient_mesh);
}
static inline HRESULT ID2D1DeviceContext6_CreateImageSourceFromWic(ID2D1DeviceContext6* This,IWICBitmapSource *wic_bitmap_source,D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,D2D1_ALPHA_MODE alpha_mode,ID2D1ImageSourceFromWic **image_source) {
    return This->lpVtbl->CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source);
}
static inline HRESULT ID2D1DeviceContext6_CreateLookupTable3D(ID2D1DeviceContext6* This,D2D1_BUFFER_PRECISION precision,const UINT32 *extents,const BYTE *data,UINT32 data_count,const UINT32 *strides,ID2D1LookupTable3D **lookup_table) {
    return This->lpVtbl->CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table);
}
static inline HRESULT ID2D1DeviceContext6_CreateImageSourceFromDxgi(ID2D1DeviceContext6* This,IDXGISurface **surfaces,UINT32 surface_count,DXGI_COLOR_SPACE_TYPE color_space,D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,ID2D1ImageSource **image_source) {
    return This->lpVtbl->CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source);
}
static inline HRESULT ID2D1DeviceContext6_GetGradientMeshWorldBounds(ID2D1DeviceContext6* This,ID2D1GradientMesh *gradient_mesh,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGradientMeshWorldBounds(This,gradient_mesh,bounds);
}
static inline void ID2D1DeviceContext6_DrawInk(ID2D1DeviceContext6* This,ID2D1Ink *ink,ID2D1Brush *brush,ID2D1InkStyle *ink_style) {
    This->lpVtbl->DrawInk(This,ink,brush,ink_style);
}
static inline void ID2D1DeviceContext6_DrawGradientMesh(ID2D1DeviceContext6* This,ID2D1GradientMesh *gradient_mesh) {
    This->lpVtbl->DrawGradientMesh(This,gradient_mesh);
}
static inline void ID2D1DeviceContext6_DrawGdiMetafile(ID2D1DeviceContext6* This,ID2D1GdiMetafile *gdi_metafile,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect);
}
static inline HRESULT ID2D1DeviceContext6_CreateTransformedImageSource(ID2D1DeviceContext6* This,ID2D1ImageSource *source,const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,ID2D1TransformedImageSource **transformed) {
    return This->lpVtbl->CreateTransformedImageSource(This,source,props,transformed);
}
/*** ID2D1DeviceContext3 methods ***/
static inline HRESULT ID2D1DeviceContext6_CreateSpriteBatch(ID2D1DeviceContext6* This,ID2D1SpriteBatch **sprite_batch) {
    return This->lpVtbl->CreateSpriteBatch(This,sprite_batch);
}
static inline void ID2D1DeviceContext6_DrawSpriteBatch(ID2D1DeviceContext6* This,ID2D1SpriteBatch *sprite_batch,UINT32 start_index,UINT32 sprite_count,ID2D1Bitmap *bitmap,D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,D2D1_SPRITE_OPTIONS sprite_options) {
    This->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options);
}
/*** ID2D1DeviceContext4 methods ***/
static inline HRESULT ID2D1DeviceContext6_CreateSvgGlyphStyle(ID2D1DeviceContext6* This,ID2D1SvgGlyphStyle **svg_glyph_style) {
    return This->lpVtbl->CreateSvgGlyphStyle(This,svg_glyph_style);
}
static inline void ID2D1DeviceContext6_DrawText(ID2D1DeviceContext6* This,const WCHAR *string,UINT32 string_length,IDWriteTextFormat *text_format,const D2D1_RECT_F *layout_rect,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,D2D1_DRAW_TEXT_OPTIONS options,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->ID2D1DeviceContext4_DrawText(This,string,string_length,text_format,layout_rect,default_fill_brush,svg_glyph_style,color_palette_index,options,measuring_mode);
}
static inline void ID2D1DeviceContext6_DrawTextLayout(ID2D1DeviceContext6* This,D2D1_POINT_2F origin,IDWriteTextLayout *text_layout,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,D2D1_DRAW_TEXT_OPTIONS options) {
    This->lpVtbl->ID2D1DeviceContext4_DrawTextLayout(This,origin,text_layout,default_fill_brush,svg_glyph_style,color_palette_index,options);
}
static inline void ID2D1DeviceContext6_DrawColorBitmapGlyphRun(ID2D1DeviceContext6* This,DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,DWRITE_MEASURING_MODE measuring_mode,D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION bitmap_snap_option) {
    This->lpVtbl->DrawColorBitmapGlyphRun(This,glyph_image_format,baseline_origin,glyph_run,measuring_mode,bitmap_snap_option);
}
static inline void ID2D1DeviceContext6_DrawSvgGlyphRun(ID2D1DeviceContext6* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->DrawSvgGlyphRun(This,baseline_origin,glyph_run,default_fill_brush,svg_glyph_style,color_palette_index,measuring_mode);
}
static inline HRESULT ID2D1DeviceContext6_GetColorBitmapGlyphImage(ID2D1DeviceContext6* This,DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,D2D1_POINT_2F glyph_origin,IDWriteFontFace *font_face,FLOAT font_em_size,UINT16 glyph_index,BOOL is_sideways,const D2D1_MATRIX_3X2_F *world_transform,FLOAT dpi_x,FLOAT dpi_y,D2D1_MATRIX_3X2_F *glyph_transform,ID2D1Image **glyph_image) {
    return This->lpVtbl->GetColorBitmapGlyphImage(This,glyph_image_format,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,dpi_x,dpi_y,glyph_transform,glyph_image);
}
static inline HRESULT ID2D1DeviceContext6_GetSvgGlyphImage(ID2D1DeviceContext6* This,D2D1_POINT_2F glyph_origin,IDWriteFontFace *font_face,FLOAT font_em_size,UINT16 glyph_index,BOOL is_sideways,const D2D1_MATRIX_3X2_F *world_transform,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,D2D1_MATRIX_3X2_F *glyph_transform,ID2D1CommandList **glyph_image) {
    return This->lpVtbl->GetSvgGlyphImage(This,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,default_fill_brush,svg_glyph_style,color_palette_index,glyph_transform,glyph_image);
}
/*** ID2D1DeviceContext5 methods ***/
static inline HRESULT ID2D1DeviceContext6_CreateSvgDocument(ID2D1DeviceContext6* This,IStream *input_xml_stream,D2D1_SIZE_F viewport_size,ID2D1SvgDocument **svg_document) {
    return This->lpVtbl->CreateSvgDocument(This,input_xml_stream,viewport_size,svg_document);
}
static inline void ID2D1DeviceContext6_DrawSvgDocument(ID2D1DeviceContext6* This,ID2D1SvgDocument *svg_document) {
    This->lpVtbl->DrawSvgDocument(This,svg_document);
}
static inline HRESULT ID2D1DeviceContext6_CreateColorContextFromDxgiColorSpace(ID2D1DeviceContext6* This,DXGI_COLOR_SPACE_TYPE color_space,ID2D1ColorContext1 **color_context) {
    return This->lpVtbl->CreateColorContextFromDxgiColorSpace(This,color_space,color_context);
}
static inline HRESULT ID2D1DeviceContext6_CreateColorContextFromSimpleColorProfile(ID2D1DeviceContext6* This,const D2D1_SIMPLE_COLOR_PROFILE *simple_profile,ID2D1ColorContext1 **color_context) {
    return This->lpVtbl->CreateColorContextFromSimpleColorProfile(This,simple_profile,color_context);
}
/*** ID2D1DeviceContext6 methods ***/
static inline void ID2D1DeviceContext6_BlendImage(ID2D1DeviceContext6* This,ID2D1Image *image,D2D1_BLEND_MODE blend_mode,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode) {
    This->lpVtbl->BlendImage(This,image,blend_mode,target_offset,image_rect,interpolation_mode);
}
#endif
#endif

#endif


#endif  /* __ID2D1DeviceContext6_INTERFACE_DEFINED__ */

#ifndef DWRITE_PAINT_FEATURE_LEVEL_DEFINED
#define DWRITE_PAINT_FEATURE_LEVEL_DEFINED
typedef enum DWRITE_PAINT_FEATURE_LEVEL {
    DWRITE_PAINT_FEATURE_LEVEL_NONE = 0,
    DWRITE_PAINT_FEATURE_LEVEL_COLR_V0 = 1,
    DWRITE_PAINT_FEATURE_LEVEL_COLR_V1 = 2
} DWRITE_PAINT_FEATURE_LEVEL;
#endif /* DWRITE_PAINT_FEATURE_LEVEL_DEFINED */
/*****************************************************************************
 * ID2D1DeviceContext7 interface
 */
#ifndef __ID2D1DeviceContext7_INTERFACE_DEFINED__
#define __ID2D1DeviceContext7_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DeviceContext7, 0xec891cf7, 0x9b69, 0x4851, 0x9d,0xef, 0x4e,0x09,0x15,0x77,0x1e,0x62);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ec891cf7-9b69-4851-9def-4e0915771e62")
ID2D1DeviceContext7 : public ID2D1DeviceContext6
{
    virtual DWRITE_PAINT_FEATURE_LEVEL STDMETHODCALLTYPE GetPaintFeatureLevel(
        ) = 0;

    virtual void STDMETHODCALLTYPE DrawPaintGlyphRun(
        D2D1_POINT_2F origin,
        const DWRITE_GLYPH_RUN *run,
        ID2D1Brush *brush = 0,
        UINT32 palette_index = 0,
        DWRITE_MEASURING_MODE measuring_mode = DWRITE_MEASURING_MODE_NATURAL) = 0;

    virtual void STDMETHODCALLTYPE DrawGlyphRunWithColorSupport(
        D2D1_POINT_2F origin,
        const DWRITE_GLYPH_RUN *run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,
        ID2D1Brush *brush,
        ID2D1SvgGlyphStyle *style,
        UINT32 palette_index = 0,
        DWRITE_MEASURING_MODE measuring_mode = DWRITE_MEASURING_MODE_NATURAL,
        D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION snap_option = D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_DEFAULT) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DeviceContext7, 0xec891cf7, 0x9b69, 0x4851, 0x9d,0xef, 0x4e,0x09,0x15,0x77,0x1e,0x62)
#endif
#else
typedef struct ID2D1DeviceContext7Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1DeviceContext7 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1DeviceContext7 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1DeviceContext7 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1DeviceContext7 *This,
        ID2D1Factory **factory);

    /*** ID2D1RenderTarget methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateBitmap)(
        ID2D1DeviceContext7 *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext7 *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateSharedBitmap)(
        ID2D1DeviceContext7 *This,
        REFIID iid,
        void *data,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapBrush)(
        ID2D1DeviceContext7 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateSolidColorBrush)(
        ID2D1DeviceContext7 *This,
        const D2D1_COLOR_F *color,
        const D2D1_BRUSH_PROPERTIES *desc,
        ID2D1SolidColorBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateGradientStopCollection)(
        ID2D1DeviceContext7 *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_GAMMA gamma,
        D2D1_EXTEND_MODE extend_mode,
        ID2D1GradientStopCollection **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateLinearGradientBrush)(
        ID2D1DeviceContext7 *This,
        const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1LinearGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateRadialGradientBrush)(
        ID2D1DeviceContext7 *This,
        const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1RadialGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateCompatibleRenderTarget)(
        ID2D1DeviceContext7 *This,
        const D2D1_SIZE_F *size,
        const D2D1_SIZE_U *pixel_size,
        const D2D1_PIXEL_FORMAT *format,
        D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,
        ID2D1BitmapRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateLayer)(
        ID2D1DeviceContext7 *This,
        const D2D1_SIZE_F *size,
        ID2D1Layer **layer);

    HRESULT (STDMETHODCALLTYPE *CreateMesh)(
        ID2D1DeviceContext7 *This,
        ID2D1Mesh **mesh);

    void (STDMETHODCALLTYPE *DrawLine)(
        ID2D1DeviceContext7 *This,
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *DrawRectangle)(
        ID2D1DeviceContext7 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRectangle)(
        ID2D1DeviceContext7 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawRoundedRectangle)(
        ID2D1DeviceContext7 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRoundedRectangle)(
        ID2D1DeviceContext7 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawEllipse)(
        ID2D1DeviceContext7 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillEllipse)(
        ID2D1DeviceContext7 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawGeometry)(
        ID2D1DeviceContext7 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillGeometry)(
        ID2D1DeviceContext7 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        ID2D1Brush *opacity_brush);

    void (STDMETHODCALLTYPE *FillMesh)(
        ID2D1DeviceContext7 *This,
        ID2D1Mesh *mesh,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *FillOpacityMask)(
        ID2D1DeviceContext7 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        D2D1_OPACITY_MASK_CONTENT content,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawBitmap)(
        ID2D1DeviceContext7 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawText)(
        ID2D1DeviceContext7 *This,
        const WCHAR *string,
        UINT32 string_len,
        IDWriteTextFormat *text_format,
        const D2D1_RECT_F *layout_rect,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawTextLayout)(
        ID2D1DeviceContext7 *This,
        D2D1_POINT_2F origin,
        IDWriteTextLayout *layout,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options);

    void (STDMETHODCALLTYPE *DrawGlyphRun)(
        ID2D1DeviceContext7 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *SetTransform)(
        ID2D1DeviceContext7 *This,
        const D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *GetTransform)(
        ID2D1DeviceContext7 *This,
        D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *SetAntialiasMode)(
        ID2D1DeviceContext7 *This,
        D2D1_ANTIALIAS_MODE antialias_mode);

    D2D1_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetAntialiasMode)(
        ID2D1DeviceContext7 *This);

    void (STDMETHODCALLTYPE *SetTextAntialiasMode)(
        ID2D1DeviceContext7 *This,
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode);

    D2D1_TEXT_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetTextAntialiasMode)(
        ID2D1DeviceContext7 *This);

    void (STDMETHODCALLTYPE *SetTextRenderingParams)(
        ID2D1DeviceContext7 *This,
        IDWriteRenderingParams *text_rendering_params);

    void (STDMETHODCALLTYPE *GetTextRenderingParams)(
        ID2D1DeviceContext7 *This,
        IDWriteRenderingParams **text_rendering_params);

    void (STDMETHODCALLTYPE *SetTags)(
        ID2D1DeviceContext7 *This,
        D2D1_TAG tag1,
        D2D1_TAG tag2);

    void (STDMETHODCALLTYPE *GetTags)(
        ID2D1DeviceContext7 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *PushLayer)(
        ID2D1DeviceContext7 *This,
        const D2D1_LAYER_PARAMETERS *layer_parameters,
        ID2D1Layer *layer);

    void (STDMETHODCALLTYPE *PopLayer)(
        ID2D1DeviceContext7 *This);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        ID2D1DeviceContext7 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *SaveDrawingState)(
        ID2D1DeviceContext7 *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *RestoreDrawingState)(
        ID2D1DeviceContext7 *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *PushAxisAlignedClip)(
        ID2D1DeviceContext7 *This,
        const D2D1_RECT_F *clip_rect,
        D2D1_ANTIALIAS_MODE antialias_mode);

    void (STDMETHODCALLTYPE *PopAxisAlignedClip)(
        ID2D1DeviceContext7 *This);

    void (STDMETHODCALLTYPE *Clear)(
        ID2D1DeviceContext7 *This,
        const D2D1_COLOR_F *color);

    void (STDMETHODCALLTYPE *BeginDraw)(
        ID2D1DeviceContext7 *This);

    HRESULT (STDMETHODCALLTYPE *EndDraw)(
        ID2D1DeviceContext7 *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    D2D1_PIXEL_FORMAT * (STDMETHODCALLTYPE *GetPixelFormat)(
        ID2D1DeviceContext7 *This,
        D2D1_PIXEL_FORMAT *__ret);

    void (STDMETHODCALLTYPE *SetDpi)(
        ID2D1DeviceContext7 *This,
        float dpi_x,
        float dpi_y);

    void (STDMETHODCALLTYPE *GetDpi)(
        ID2D1DeviceContext7 *This,
        float *dpi_x,
        float *dpi_y);

    D2D1_SIZE_F * (STDMETHODCALLTYPE *GetSize)(
        ID2D1DeviceContext7 *This,
        D2D1_SIZE_F *__ret);

    D2D1_SIZE_U * (STDMETHODCALLTYPE *GetPixelSize)(
        ID2D1DeviceContext7 *This,
        D2D1_SIZE_U *__ret);

    UINT32 (STDMETHODCALLTYPE *GetMaximumBitmapSize)(
        ID2D1DeviceContext7 *This);

    BOOL (STDMETHODCALLTYPE *IsSupported)(
        ID2D1DeviceContext7 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc);

    /*** ID2D1DeviceContext methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmap)(
        ID2D1DeviceContext7 *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext7 *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateColorContext)(
        ID2D1DeviceContext7 *This,
        D2D1_COLOR_SPACE space,
        const BYTE *profile,
        UINT32 profile_size,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromFilename)(
        ID2D1DeviceContext7 *This,
        const WCHAR *filename,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromWicColorContext)(
        ID2D1DeviceContext7 *This,
        IWICColorContext *wic_color_context,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromDxgiSurface)(
        ID2D1DeviceContext7 *This,
        IDXGISurface *surface,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateEffect)(
        ID2D1DeviceContext7 *This,
        REFCLSID effect_id,
        ID2D1Effect **effect);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateGradientStopCollection)(
        ID2D1DeviceContext7 *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_COLOR_SPACE preinterpolation_space,
        D2D1_COLOR_SPACE postinterpolation_space,
        D2D1_BUFFER_PRECISION buffer_precision,
        D2D1_EXTEND_MODE extend_mode,
        D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,
        ID2D1GradientStopCollection1 **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateImageBrush)(
        ID2D1DeviceContext7 *This,
        ID2D1Image *image,
        const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1ImageBrush **brush);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapBrush)(
        ID2D1DeviceContext7 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush1 **bitmap_brush);

    HRESULT (STDMETHODCALLTYPE *CreateCommandList)(
        ID2D1DeviceContext7 *This,
        ID2D1CommandList **command_list);

    BOOL (STDMETHODCALLTYPE *IsDxgiFormatSupported)(
        ID2D1DeviceContext7 *This,
        DXGI_FORMAT format);

    BOOL (STDMETHODCALLTYPE *IsBufferPrecisionSupported)(
        ID2D1DeviceContext7 *This,
        D2D1_BUFFER_PRECISION buffer_precision);

    HRESULT (STDMETHODCALLTYPE *GetImageLocalBounds)(
        ID2D1DeviceContext7 *This,
        ID2D1Image *image,
        D2D1_RECT_F *local_bounds);

    HRESULT (STDMETHODCALLTYPE *GetImageWorldBounds)(
        ID2D1DeviceContext7 *This,
        ID2D1Image *image,
        D2D1_RECT_F *world_bounds);

    HRESULT (STDMETHODCALLTYPE *GetGlyphRunWorldBounds)(
        ID2D1DeviceContext7 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *GetDevice)(
        ID2D1DeviceContext7 *This,
        ID2D1Device **device);

    void (STDMETHODCALLTYPE *SetTarget)(
        ID2D1DeviceContext7 *This,
        ID2D1Image *target);

    void (STDMETHODCALLTYPE *GetTarget)(
        ID2D1DeviceContext7 *This,
        ID2D1Image **target);

    void (STDMETHODCALLTYPE *SetRenderingControls)(
        ID2D1DeviceContext7 *This,
        const D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *GetRenderingControls)(
        ID2D1DeviceContext7 *This,
        D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *SetPrimitiveBlend)(
        ID2D1DeviceContext7 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    D2D1_PRIMITIVE_BLEND (STDMETHODCALLTYPE *GetPrimitiveBlend)(
        ID2D1DeviceContext7 *This);

    void (STDMETHODCALLTYPE *SetUnitMode)(
        ID2D1DeviceContext7 *This,
        D2D1_UNIT_MODE unit_mode);

    D2D1_UNIT_MODE (STDMETHODCALLTYPE *GetUnitMode)(
        ID2D1DeviceContext7 *This);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawGlyphRun)(
        ID2D1DeviceContext7 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawImage)(
        ID2D1DeviceContext7 *This,
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode);

    void (STDMETHODCALLTYPE *DrawGdiMetafile)(
        ID2D1DeviceContext7 *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawBitmap)(
        ID2D1DeviceContext7 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_PushLayer)(
        ID2D1DeviceContext7 *This,
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer);

    HRESULT (STDMETHODCALLTYPE *InvalidateEffectInputRectangle)(
        ID2D1DeviceContext7 *This,
        ID2D1Effect *effect,
        UINT32 input,
        const D2D1_RECT_F *input_rect);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangleCount)(
        ID2D1DeviceContext7 *This,
        ID2D1Effect *effect,
        UINT32 *rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangles)(
        ID2D1DeviceContext7 *This,
        ID2D1Effect *effect,
        D2D1_RECT_F *rectangles,
        UINT32 rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectRequiredInputRectangles)(
        ID2D1DeviceContext7 *This,
        ID2D1Effect *effect,
        const D2D1_RECT_F *image_rect,
        const D2D1_EFFECT_INPUT_DESCRIPTION *desc,
        D2D1_RECT_F *input_rect,
        UINT32 input_count);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_FillOpacityMask)(
        ID2D1DeviceContext7 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    /*** ID2D1DeviceContext1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateFilledGeometryRealization)(
        ID2D1DeviceContext7 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        ID2D1GeometryRealization **realization);

    HRESULT (STDMETHODCALLTYPE *CreateStrokedGeometryRealization)(
        ID2D1DeviceContext7 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        ID2D1GeometryRealization **realization);

    void (STDMETHODCALLTYPE *DrawGeometryRealization)(
        ID2D1DeviceContext7 *This,
        ID2D1GeometryRealization *realization,
        ID2D1Brush *brush);

    /*** ID2D1DeviceContext2 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateInk)(
        ID2D1DeviceContext7 *This,
        const D2D1_INK_POINT *start_point,
        ID2D1Ink **ink);

    HRESULT (STDMETHODCALLTYPE *CreateInkStyle)(
        ID2D1DeviceContext7 *This,
        const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,
        ID2D1InkStyle **ink_style);

    HRESULT (STDMETHODCALLTYPE *CreateGradientMesh)(
        ID2D1DeviceContext7 *This,
        const D2D1_GRADIENT_MESH_PATCH *patches,
        UINT32 patches_count,
        ID2D1GradientMesh **gradient_mesh);

    HRESULT (STDMETHODCALLTYPE *CreateImageSourceFromWic)(
        ID2D1DeviceContext7 *This,
        IWICBitmapSource *wic_bitmap_source,
        D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,
        D2D1_ALPHA_MODE alpha_mode,
        ID2D1ImageSourceFromWic **image_source);

    HRESULT (STDMETHODCALLTYPE *CreateLookupTable3D)(
        ID2D1DeviceContext7 *This,
        D2D1_BUFFER_PRECISION precision,
        const UINT32 *extents,
        const BYTE *data,
        UINT32 data_count,
        const UINT32 *strides,
        ID2D1LookupTable3D **lookup_table);

    HRESULT (STDMETHODCALLTYPE *CreateImageSourceFromDxgi)(
        ID2D1DeviceContext7 *This,
        IDXGISurface **surfaces,
        UINT32 surface_count,
        DXGI_COLOR_SPACE_TYPE color_space,
        D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,
        ID2D1ImageSource **image_source);

    HRESULT (STDMETHODCALLTYPE *GetGradientMeshWorldBounds)(
        ID2D1DeviceContext7 *This,
        ID2D1GradientMesh *gradient_mesh,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *DrawInk)(
        ID2D1DeviceContext7 *This,
        ID2D1Ink *ink,
        ID2D1Brush *brush,
        ID2D1InkStyle *ink_style);

    void (STDMETHODCALLTYPE *DrawGradientMesh)(
        ID2D1DeviceContext7 *This,
        ID2D1GradientMesh *gradient_mesh);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext2_DrawGdiMetafile)(
        ID2D1DeviceContext7 *This,
        ID2D1GdiMetafile *gdi_metafile,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedImageSource)(
        ID2D1DeviceContext7 *This,
        ID2D1ImageSource *source,
        const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,
        ID2D1TransformedImageSource **transformed);

    /*** ID2D1DeviceContext3 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSpriteBatch)(
        ID2D1DeviceContext7 *This,
        ID2D1SpriteBatch **sprite_batch);

    void (STDMETHODCALLTYPE *DrawSpriteBatch)(
        ID2D1DeviceContext7 *This,
        ID2D1SpriteBatch *sprite_batch,
        UINT32 start_index,
        UINT32 sprite_count,
        ID2D1Bitmap *bitmap,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        D2D1_SPRITE_OPTIONS sprite_options);

    /*** ID2D1DeviceContext4 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSvgGlyphStyle)(
        ID2D1DeviceContext7 *This,
        ID2D1SvgGlyphStyle **svg_glyph_style);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext4_DrawText)(
        ID2D1DeviceContext7 *This,
        const WCHAR *string,
        UINT32 string_length,
        IDWriteTextFormat *text_format,
        const D2D1_RECT_F *layout_rect,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_DRAW_TEXT_OPTIONS options,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext4_DrawTextLayout)(
        ID2D1DeviceContext7 *This,
        D2D1_POINT_2F origin,
        IDWriteTextLayout *text_layout,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_DRAW_TEXT_OPTIONS options);

    void (STDMETHODCALLTYPE *DrawColorBitmapGlyphRun)(
        ID2D1DeviceContext7 *This,
        DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION bitmap_snap_option);

    void (STDMETHODCALLTYPE *DrawSvgGlyphRun)(
        ID2D1DeviceContext7 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        DWRITE_MEASURING_MODE measuring_mode);

    HRESULT (STDMETHODCALLTYPE *GetColorBitmapGlyphImage)(
        ID2D1DeviceContext7 *This,
        DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,
        D2D1_POINT_2F glyph_origin,
        IDWriteFontFace *font_face,
        FLOAT font_em_size,
        UINT16 glyph_index,
        BOOL is_sideways,
        const D2D1_MATRIX_3X2_F *world_transform,
        FLOAT dpi_x,
        FLOAT dpi_y,
        D2D1_MATRIX_3X2_F *glyph_transform,
        ID2D1Image **glyph_image);

    HRESULT (STDMETHODCALLTYPE *GetSvgGlyphImage)(
        ID2D1DeviceContext7 *This,
        D2D1_POINT_2F glyph_origin,
        IDWriteFontFace *font_face,
        FLOAT font_em_size,
        UINT16 glyph_index,
        BOOL is_sideways,
        const D2D1_MATRIX_3X2_F *world_transform,
        ID2D1Brush *default_fill_brush,
        ID2D1SvgGlyphStyle *svg_glyph_style,
        UINT32 color_palette_index,
        D2D1_MATRIX_3X2_F *glyph_transform,
        ID2D1CommandList **glyph_image);

    /*** ID2D1DeviceContext5 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSvgDocument)(
        ID2D1DeviceContext7 *This,
        IStream *input_xml_stream,
        D2D1_SIZE_F viewport_size,
        ID2D1SvgDocument **svg_document);

    void (STDMETHODCALLTYPE *DrawSvgDocument)(
        ID2D1DeviceContext7 *This,
        ID2D1SvgDocument *svg_document);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromDxgiColorSpace)(
        ID2D1DeviceContext7 *This,
        DXGI_COLOR_SPACE_TYPE color_space,
        ID2D1ColorContext1 **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromSimpleColorProfile)(
        ID2D1DeviceContext7 *This,
        const D2D1_SIMPLE_COLOR_PROFILE *simple_profile,
        ID2D1ColorContext1 **color_context);

    /*** ID2D1DeviceContext6 methods ***/
    void (STDMETHODCALLTYPE *BlendImage)(
        ID2D1DeviceContext7 *This,
        ID2D1Image *image,
        D2D1_BLEND_MODE blend_mode,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode);

    /*** ID2D1DeviceContext7 methods ***/
    DWRITE_PAINT_FEATURE_LEVEL (STDMETHODCALLTYPE *GetPaintFeatureLevel)(
        ID2D1DeviceContext7 *This);

    void (STDMETHODCALLTYPE *DrawPaintGlyphRun)(
        ID2D1DeviceContext7 *This,
        D2D1_POINT_2F origin,
        const DWRITE_GLYPH_RUN *run,
        ID2D1Brush *brush,
        UINT32 palette_index,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawGlyphRunWithColorSupport)(
        ID2D1DeviceContext7 *This,
        D2D1_POINT_2F origin,
        const DWRITE_GLYPH_RUN *run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,
        ID2D1Brush *brush,
        ID2D1SvgGlyphStyle *style,
        UINT32 palette_index,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION snap_option);

    END_INTERFACE
} ID2D1DeviceContext7Vtbl;

interface ID2D1DeviceContext7 {
    CONST_VTBL ID2D1DeviceContext7Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DeviceContext7_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DeviceContext7_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DeviceContext7_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1DeviceContext7_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1RenderTarget methods ***/
#define ID2D1DeviceContext7_CreateSharedBitmap(This,iid,data,desc,bitmap) (This)->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap)
#define ID2D1DeviceContext7_CreateSolidColorBrush(This,color,desc,brush) (This)->lpVtbl->CreateSolidColorBrush(This,color,desc,brush)
#define ID2D1DeviceContext7_CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext7_CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext7_CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target) (This)->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target)
#define ID2D1DeviceContext7_CreateLayer(This,size,layer) (This)->lpVtbl->CreateLayer(This,size,layer)
#define ID2D1DeviceContext7_CreateMesh(This,mesh) (This)->lpVtbl->CreateMesh(This,mesh)
#define ID2D1DeviceContext7_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext7_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext7_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1DeviceContext7_DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext7_FillRoundedRectangle(This,rect,brush) (This)->lpVtbl->FillRoundedRectangle(This,rect,brush)
#define ID2D1DeviceContext7_DrawEllipse(This,ellipse,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext7_FillEllipse(This,ellipse,brush) (This)->lpVtbl->FillEllipse(This,ellipse,brush)
#define ID2D1DeviceContext7_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext7_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1DeviceContext7_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1DeviceContext7_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1DeviceContext7_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#define ID2D1DeviceContext7_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext7_GetAntialiasMode(This) (This)->lpVtbl->GetAntialiasMode(This)
#define ID2D1DeviceContext7_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext7_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
#define ID2D1DeviceContext7_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext7_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext7_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1DeviceContext7_GetTags(This,tag1,tag2) (This)->lpVtbl->GetTags(This,tag1,tag2)
#define ID2D1DeviceContext7_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#define ID2D1DeviceContext7_Flush(This,tag1,tag2) (This)->lpVtbl->Flush(This,tag1,tag2)
#define ID2D1DeviceContext7_SaveDrawingState(This,state_block) (This)->lpVtbl->SaveDrawingState(This,state_block)
#define ID2D1DeviceContext7_RestoreDrawingState(This,state_block) (This)->lpVtbl->RestoreDrawingState(This,state_block)
#define ID2D1DeviceContext7_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1DeviceContext7_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1DeviceContext7_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1DeviceContext7_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1DeviceContext7_EndDraw(This,tag1,tag2) (This)->lpVtbl->EndDraw(This,tag1,tag2)
#define ID2D1DeviceContext7_GetPixelFormat(This) ID2D1DeviceContext7_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext7_SetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->SetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext7_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext7_GetSize(This) ID2D1DeviceContext7_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext7_GetPixelSize(This) ID2D1DeviceContext7_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext7_GetMaximumBitmapSize(This) (This)->lpVtbl->GetMaximumBitmapSize(This)
#define ID2D1DeviceContext7_IsSupported(This,desc) (This)->lpVtbl->IsSupported(This,desc)
/*** ID2D1DeviceContext methods ***/
#define ID2D1DeviceContext7_CreateBitmap(This,size,src_data,pitch,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap)
#define ID2D1DeviceContext7_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap)
#define ID2D1DeviceContext7_CreateColorContext(This,space,profile,profile_size,color_context) (This)->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context)
#define ID2D1DeviceContext7_CreateColorContextFromFilename(This,filename,color_context) (This)->lpVtbl->CreateColorContextFromFilename(This,filename,color_context)
#define ID2D1DeviceContext7_CreateColorContextFromWicColorContext(This,wic_color_context,color_context) (This)->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context)
#define ID2D1DeviceContext7_CreateBitmapFromDxgiSurface(This,surface,desc,bitmap) (This)->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap)
#define ID2D1DeviceContext7_CreateEffect(This,effect_id,effect) (This)->lpVtbl->CreateEffect(This,effect_id,effect)
#define ID2D1DeviceContext7_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient) (This)->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient)
#define ID2D1DeviceContext7_CreateImageBrush(This,image,image_brush_desc,brush_desc,brush) (This)->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush)
#define ID2D1DeviceContext7_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush)
#define ID2D1DeviceContext7_CreateCommandList(This,command_list) (This)->lpVtbl->CreateCommandList(This,command_list)
#define ID2D1DeviceContext7_IsDxgiFormatSupported(This,format) (This)->lpVtbl->IsDxgiFormatSupported(This,format)
#define ID2D1DeviceContext7_IsBufferPrecisionSupported(This,buffer_precision) (This)->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision)
#define ID2D1DeviceContext7_GetImageLocalBounds(This,image,local_bounds) (This)->lpVtbl->GetImageLocalBounds(This,image,local_bounds)
#define ID2D1DeviceContext7_GetImageWorldBounds(This,image,world_bounds) (This)->lpVtbl->GetImageWorldBounds(This,image,world_bounds)
#define ID2D1DeviceContext7_GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds) (This)->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds)
#define ID2D1DeviceContext7_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define ID2D1DeviceContext7_SetTarget(This,target) (This)->lpVtbl->SetTarget(This,target)
#define ID2D1DeviceContext7_GetTarget(This,target) (This)->lpVtbl->GetTarget(This,target)
#define ID2D1DeviceContext7_SetRenderingControls(This,rendering_controls) (This)->lpVtbl->SetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext7_GetRenderingControls(This,rendering_controls) (This)->lpVtbl->GetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext7_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1DeviceContext7_GetPrimitiveBlend(This) (This)->lpVtbl->GetPrimitiveBlend(This)
#define ID2D1DeviceContext7_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1DeviceContext7_GetUnitMode(This) (This)->lpVtbl->GetUnitMode(This)
#define ID2D1DeviceContext7_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode) (This)->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode)
#define ID2D1DeviceContext7_DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode) (This)->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode)
#define ID2D1DeviceContext7_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform) (This)->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform)
#define ID2D1DeviceContext7_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer)
#define ID2D1DeviceContext7_InvalidateEffectInputRectangle(This,effect,input,input_rect) (This)->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect)
#define ID2D1DeviceContext7_GetEffectInvalidRectangleCount(This,effect,rect_count) (This)->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count)
#define ID2D1DeviceContext7_GetEffectInvalidRectangles(This,effect,rectangles,rect_count) (This)->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count)
#define ID2D1DeviceContext7_GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count) (This)->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count)
#define ID2D1DeviceContext7_FillOpacityMask(This,mask,brush,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect)
/*** ID2D1DeviceContext1 methods ***/
#define ID2D1DeviceContext7_CreateFilledGeometryRealization(This,geometry,tolerance,realization) (This)->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization)
#define ID2D1DeviceContext7_CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization) (This)->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization)
#define ID2D1DeviceContext7_DrawGeometryRealization(This,realization,brush) (This)->lpVtbl->DrawGeometryRealization(This,realization,brush)
/*** ID2D1DeviceContext2 methods ***/
#define ID2D1DeviceContext7_CreateInk(This,start_point,ink) (This)->lpVtbl->CreateInk(This,start_point,ink)
#define ID2D1DeviceContext7_CreateInkStyle(This,ink_style_properties,ink_style) (This)->lpVtbl->CreateInkStyle(This,ink_style_properties,ink_style)
#define ID2D1DeviceContext7_CreateGradientMesh(This,patches,patches_count,gradient_mesh) (This)->lpVtbl->CreateGradientMesh(This,patches,patches_count,gradient_mesh)
#define ID2D1DeviceContext7_CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source) (This)->lpVtbl->CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source)
#define ID2D1DeviceContext7_CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table) (This)->lpVtbl->CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table)
#define ID2D1DeviceContext7_CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source) (This)->lpVtbl->CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source)
#define ID2D1DeviceContext7_GetGradientMeshWorldBounds(This,gradient_mesh,bounds) (This)->lpVtbl->GetGradientMeshWorldBounds(This,gradient_mesh,bounds)
#define ID2D1DeviceContext7_DrawInk(This,ink,brush,ink_style) (This)->lpVtbl->DrawInk(This,ink,brush,ink_style)
#define ID2D1DeviceContext7_DrawGradientMesh(This,gradient_mesh) (This)->lpVtbl->DrawGradientMesh(This,gradient_mesh)
#define ID2D1DeviceContext7_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect)
#define ID2D1DeviceContext7_CreateTransformedImageSource(This,source,props,transformed) (This)->lpVtbl->CreateTransformedImageSource(This,source,props,transformed)
/*** ID2D1DeviceContext3 methods ***/
#define ID2D1DeviceContext7_CreateSpriteBatch(This,sprite_batch) (This)->lpVtbl->CreateSpriteBatch(This,sprite_batch)
#define ID2D1DeviceContext7_DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options) (This)->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options)
/*** ID2D1DeviceContext4 methods ***/
#define ID2D1DeviceContext7_CreateSvgGlyphStyle(This,svg_glyph_style) (This)->lpVtbl->CreateSvgGlyphStyle(This,svg_glyph_style)
#define ID2D1DeviceContext7_DrawText(This,string,string_length,text_format,layout_rect,default_fill_brush,svg_glyph_style,color_palette_index,options,measuring_mode) (This)->lpVtbl->ID2D1DeviceContext4_DrawText(This,string,string_length,text_format,layout_rect,default_fill_brush,svg_glyph_style,color_palette_index,options,measuring_mode)
#define ID2D1DeviceContext7_DrawTextLayout(This,origin,text_layout,default_fill_brush,svg_glyph_style,color_palette_index,options) (This)->lpVtbl->ID2D1DeviceContext4_DrawTextLayout(This,origin,text_layout,default_fill_brush,svg_glyph_style,color_palette_index,options)
#define ID2D1DeviceContext7_DrawColorBitmapGlyphRun(This,glyph_image_format,baseline_origin,glyph_run,measuring_mode,bitmap_snap_option) (This)->lpVtbl->DrawColorBitmapGlyphRun(This,glyph_image_format,baseline_origin,glyph_run,measuring_mode,bitmap_snap_option)
#define ID2D1DeviceContext7_DrawSvgGlyphRun(This,baseline_origin,glyph_run,default_fill_brush,svg_glyph_style,color_palette_index,measuring_mode) (This)->lpVtbl->DrawSvgGlyphRun(This,baseline_origin,glyph_run,default_fill_brush,svg_glyph_style,color_palette_index,measuring_mode)
#define ID2D1DeviceContext7_GetColorBitmapGlyphImage(This,glyph_image_format,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,dpi_x,dpi_y,glyph_transform,glyph_image) (This)->lpVtbl->GetColorBitmapGlyphImage(This,glyph_image_format,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,dpi_x,dpi_y,glyph_transform,glyph_image)
#define ID2D1DeviceContext7_GetSvgGlyphImage(This,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,default_fill_brush,svg_glyph_style,color_palette_index,glyph_transform,glyph_image) (This)->lpVtbl->GetSvgGlyphImage(This,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,default_fill_brush,svg_glyph_style,color_palette_index,glyph_transform,glyph_image)
/*** ID2D1DeviceContext5 methods ***/
#define ID2D1DeviceContext7_CreateSvgDocument(This,input_xml_stream,viewport_size,svg_document) (This)->lpVtbl->CreateSvgDocument(This,input_xml_stream,viewport_size,svg_document)
#define ID2D1DeviceContext7_DrawSvgDocument(This,svg_document) (This)->lpVtbl->DrawSvgDocument(This,svg_document)
#define ID2D1DeviceContext7_CreateColorContextFromDxgiColorSpace(This,color_space,color_context) (This)->lpVtbl->CreateColorContextFromDxgiColorSpace(This,color_space,color_context)
#define ID2D1DeviceContext7_CreateColorContextFromSimpleColorProfile(This,simple_profile,color_context) (This)->lpVtbl->CreateColorContextFromSimpleColorProfile(This,simple_profile,color_context)
/*** ID2D1DeviceContext6 methods ***/
#define ID2D1DeviceContext7_BlendImage(This,image,blend_mode,target_offset,image_rect,interpolation_mode) (This)->lpVtbl->BlendImage(This,image,blend_mode,target_offset,image_rect,interpolation_mode)
/*** ID2D1DeviceContext7 methods ***/
#define ID2D1DeviceContext7_GetPaintFeatureLevel(This) (This)->lpVtbl->GetPaintFeatureLevel(This)
#define ID2D1DeviceContext7_DrawPaintGlyphRun(This,origin,run,brush,palette_index,measuring_mode) (This)->lpVtbl->DrawPaintGlyphRun(This,origin,run,brush,palette_index,measuring_mode)
#define ID2D1DeviceContext7_DrawGlyphRunWithColorSupport(This,origin,run,run_desc,brush,style,palette_index,measuring_mode,snap_option) (This)->lpVtbl->DrawGlyphRunWithColorSupport(This,origin,run,run_desc,brush,style,palette_index,measuring_mode,snap_option)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1DeviceContext7_QueryInterface(ID2D1DeviceContext7* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1DeviceContext7_AddRef(ID2D1DeviceContext7* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1DeviceContext7_Release(ID2D1DeviceContext7* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1DeviceContext7_GetFactory(ID2D1DeviceContext7* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1RenderTarget methods ***/
static inline HRESULT ID2D1DeviceContext7_CreateSharedBitmap(ID2D1DeviceContext7* This,REFIID iid,void *data,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext7_CreateSolidColorBrush(ID2D1DeviceContext7* This,const D2D1_COLOR_F *color,const D2D1_BRUSH_PROPERTIES *desc,ID2D1SolidColorBrush **brush) {
    return This->lpVtbl->CreateSolidColorBrush(This,color,desc,brush);
}
static inline HRESULT ID2D1DeviceContext7_CreateLinearGradientBrush(ID2D1DeviceContext7* This,const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1LinearGradientBrush **brush) {
    return This->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext7_CreateRadialGradientBrush(ID2D1DeviceContext7* This,const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1RadialGradientBrush **brush) {
    return This->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext7_CreateCompatibleRenderTarget(ID2D1DeviceContext7* This,const D2D1_SIZE_F *size,const D2D1_SIZE_U *pixel_size,const D2D1_PIXEL_FORMAT *format,D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,ID2D1BitmapRenderTarget **render_target) {
    return This->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target);
}
static inline HRESULT ID2D1DeviceContext7_CreateLayer(ID2D1DeviceContext7* This,const D2D1_SIZE_F *size,ID2D1Layer **layer) {
    return This->lpVtbl->CreateLayer(This,size,layer);
}
static inline HRESULT ID2D1DeviceContext7_CreateMesh(ID2D1DeviceContext7* This,ID2D1Mesh **mesh) {
    return This->lpVtbl->CreateMesh(This,mesh);
}
static inline void ID2D1DeviceContext7_DrawLine(ID2D1DeviceContext7* This,D2D1_POINT_2F p0,D2D1_POINT_2F p1,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext7_DrawRectangle(ID2D1DeviceContext7* This,const D2D1_RECT_F *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext7_FillRectangle(ID2D1DeviceContext7* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext7_DrawRoundedRectangle(ID2D1DeviceContext7* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext7_FillRoundedRectangle(ID2D1DeviceContext7* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRoundedRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext7_DrawEllipse(ID2D1DeviceContext7* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext7_FillEllipse(ID2D1DeviceContext7* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush) {
    This->lpVtbl->FillEllipse(This,ellipse,brush);
}
static inline void ID2D1DeviceContext7_DrawGeometry(ID2D1DeviceContext7* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext7_FillGeometry(ID2D1DeviceContext7* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline void ID2D1DeviceContext7_FillMesh(ID2D1DeviceContext7* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline void ID2D1DeviceContext7_SetTransform(ID2D1DeviceContext7* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static inline void ID2D1DeviceContext7_GetTransform(ID2D1DeviceContext7* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
static inline void ID2D1DeviceContext7_SetAntialiasMode(ID2D1DeviceContext7* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline D2D1_ANTIALIAS_MODE ID2D1DeviceContext7_GetAntialiasMode(ID2D1DeviceContext7* This) {
    return This->lpVtbl->GetAntialiasMode(This);
}
static inline void ID2D1DeviceContext7_SetTextAntialiasMode(ID2D1DeviceContext7* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline D2D1_TEXT_ANTIALIAS_MODE ID2D1DeviceContext7_GetTextAntialiasMode(ID2D1DeviceContext7* This) {
    return This->lpVtbl->GetTextAntialiasMode(This);
}
static inline void ID2D1DeviceContext7_SetTextRenderingParams(ID2D1DeviceContext7* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext7_GetTextRenderingParams(ID2D1DeviceContext7* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext7_SetTags(ID2D1DeviceContext7* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext7_GetTags(ID2D1DeviceContext7* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    This->lpVtbl->GetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext7_PopLayer(ID2D1DeviceContext7* This) {
    This->lpVtbl->PopLayer(This);
}
static inline HRESULT ID2D1DeviceContext7_Flush(ID2D1DeviceContext7* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->Flush(This,tag1,tag2);
}
static inline void ID2D1DeviceContext7_SaveDrawingState(ID2D1DeviceContext7* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->SaveDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext7_RestoreDrawingState(ID2D1DeviceContext7* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->RestoreDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext7_PushAxisAlignedClip(ID2D1DeviceContext7* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline void ID2D1DeviceContext7_PopAxisAlignedClip(ID2D1DeviceContext7* This) {
    This->lpVtbl->PopAxisAlignedClip(This);
}
static inline void ID2D1DeviceContext7_Clear(ID2D1DeviceContext7* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->Clear(This,color);
}
static inline void ID2D1DeviceContext7_BeginDraw(ID2D1DeviceContext7* This) {
    This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1DeviceContext7_EndDraw(ID2D1DeviceContext7* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->EndDraw(This,tag1,tag2);
}
static inline D2D1_PIXEL_FORMAT ID2D1DeviceContext7_GetPixelFormat(ID2D1DeviceContext7* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static inline void ID2D1DeviceContext7_SetDpi(ID2D1DeviceContext7* This,float dpi_x,float dpi_y) {
    This->lpVtbl->SetDpi(This,dpi_x,dpi_y);
}
static inline void ID2D1DeviceContext7_GetDpi(ID2D1DeviceContext7* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static inline D2D1_SIZE_F ID2D1DeviceContext7_GetSize(ID2D1DeviceContext7* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static inline D2D1_SIZE_U ID2D1DeviceContext7_GetPixelSize(ID2D1DeviceContext7* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static inline UINT32 ID2D1DeviceContext7_GetMaximumBitmapSize(ID2D1DeviceContext7* This) {
    return This->lpVtbl->GetMaximumBitmapSize(This);
}
static inline BOOL ID2D1DeviceContext7_IsSupported(ID2D1DeviceContext7* This,const D2D1_RENDER_TARGET_PROPERTIES *desc) {
    return This->lpVtbl->IsSupported(This,desc);
}
/*** ID2D1DeviceContext methods ***/
static inline HRESULT ID2D1DeviceContext7_CreateBitmap(ID2D1DeviceContext7* This,D2D1_SIZE_U size,const void *src_data,UINT32 pitch,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext7_CreateBitmapFromWicBitmap(ID2D1DeviceContext7* This,IWICBitmapSource *bitmap_source,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext7_CreateColorContext(ID2D1DeviceContext7* This,D2D1_COLOR_SPACE space,const BYTE *profile,UINT32 profile_size,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context);
}
static inline HRESULT ID2D1DeviceContext7_CreateColorContextFromFilename(ID2D1DeviceContext7* This,const WCHAR *filename,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromFilename(This,filename,color_context);
}
static inline HRESULT ID2D1DeviceContext7_CreateColorContextFromWicColorContext(ID2D1DeviceContext7* This,IWICColorContext *wic_color_context,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context);
}
static inline HRESULT ID2D1DeviceContext7_CreateBitmapFromDxgiSurface(ID2D1DeviceContext7* This,IDXGISurface *surface,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext7_CreateEffect(ID2D1DeviceContext7* This,REFCLSID effect_id,ID2D1Effect **effect) {
    return This->lpVtbl->CreateEffect(This,effect_id,effect);
}
static inline HRESULT ID2D1DeviceContext7_CreateGradientStopCollection(ID2D1DeviceContext7* This,const D2D1_GRADIENT_STOP *stops,UINT32 stop_count,D2D1_COLOR_SPACE preinterpolation_space,D2D1_COLOR_SPACE postinterpolation_space,D2D1_BUFFER_PRECISION buffer_precision,D2D1_EXTEND_MODE extend_mode,D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,ID2D1GradientStopCollection1 **gradient) {
    return This->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient);
}
static inline HRESULT ID2D1DeviceContext7_CreateImageBrush(ID2D1DeviceContext7* This,ID2D1Image *image,const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1ImageBrush **brush) {
    return This->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush);
}
static inline HRESULT ID2D1DeviceContext7_CreateBitmapBrush(ID2D1DeviceContext7* This,ID2D1Bitmap *bitmap,const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1BitmapBrush1 **bitmap_brush) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush);
}
static inline HRESULT ID2D1DeviceContext7_CreateCommandList(ID2D1DeviceContext7* This,ID2D1CommandList **command_list) {
    return This->lpVtbl->CreateCommandList(This,command_list);
}
static inline BOOL ID2D1DeviceContext7_IsDxgiFormatSupported(ID2D1DeviceContext7* This,DXGI_FORMAT format) {
    return This->lpVtbl->IsDxgiFormatSupported(This,format);
}
static inline BOOL ID2D1DeviceContext7_IsBufferPrecisionSupported(ID2D1DeviceContext7* This,D2D1_BUFFER_PRECISION buffer_precision) {
    return This->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision);
}
static inline HRESULT ID2D1DeviceContext7_GetImageLocalBounds(ID2D1DeviceContext7* This,ID2D1Image *image,D2D1_RECT_F *local_bounds) {
    return This->lpVtbl->GetImageLocalBounds(This,image,local_bounds);
}
static inline HRESULT ID2D1DeviceContext7_GetImageWorldBounds(ID2D1DeviceContext7* This,ID2D1Image *image,D2D1_RECT_F *world_bounds) {
    return This->lpVtbl->GetImageWorldBounds(This,image,world_bounds);
}
static inline HRESULT ID2D1DeviceContext7_GetGlyphRunWorldBounds(ID2D1DeviceContext7* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,DWRITE_MEASURING_MODE measuring_mode,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds);
}
static inline void ID2D1DeviceContext7_GetDevice(ID2D1DeviceContext7* This,ID2D1Device **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline void ID2D1DeviceContext7_SetTarget(ID2D1DeviceContext7* This,ID2D1Image *target) {
    This->lpVtbl->SetTarget(This,target);
}
static inline void ID2D1DeviceContext7_GetTarget(ID2D1DeviceContext7* This,ID2D1Image **target) {
    This->lpVtbl->GetTarget(This,target);
}
static inline void ID2D1DeviceContext7_SetRenderingControls(ID2D1DeviceContext7* This,const D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->SetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext7_GetRenderingControls(ID2D1DeviceContext7* This,D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->GetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext7_SetPrimitiveBlend(ID2D1DeviceContext7* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline D2D1_PRIMITIVE_BLEND ID2D1DeviceContext7_GetPrimitiveBlend(ID2D1DeviceContext7* This) {
    return This->lpVtbl->GetPrimitiveBlend(This);
}
static inline void ID2D1DeviceContext7_SetUnitMode(ID2D1DeviceContext7* This,D2D1_UNIT_MODE unit_mode) {
    This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline D2D1_UNIT_MODE ID2D1DeviceContext7_GetUnitMode(ID2D1DeviceContext7* This) {
    return This->lpVtbl->GetUnitMode(This);
}
static inline void ID2D1DeviceContext7_DrawGlyphRun(ID2D1DeviceContext7* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode);
}
static inline void ID2D1DeviceContext7_DrawImage(ID2D1DeviceContext7* This,ID2D1Image *image,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode,D2D1_COMPOSITE_MODE composite_mode) {
    This->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode);
}
static inline void ID2D1DeviceContext7_DrawBitmap(ID2D1DeviceContext7* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect,const D2D1_MATRIX_4X4_F *perspective_transform) {
    This->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform);
}
static inline void ID2D1DeviceContext7_PushLayer(ID2D1DeviceContext7* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    This->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1DeviceContext7_InvalidateEffectInputRectangle(ID2D1DeviceContext7* This,ID2D1Effect *effect,UINT32 input,const D2D1_RECT_F *input_rect) {
    return This->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect);
}
static inline HRESULT ID2D1DeviceContext7_GetEffectInvalidRectangleCount(ID2D1DeviceContext7* This,ID2D1Effect *effect,UINT32 *rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count);
}
static inline HRESULT ID2D1DeviceContext7_GetEffectInvalidRectangles(ID2D1DeviceContext7* This,ID2D1Effect *effect,D2D1_RECT_F *rectangles,UINT32 rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count);
}
static inline HRESULT ID2D1DeviceContext7_GetEffectRequiredInputRectangles(ID2D1DeviceContext7* This,ID2D1Effect *effect,const D2D1_RECT_F *image_rect,const D2D1_EFFECT_INPUT_DESCRIPTION *desc,D2D1_RECT_F *input_rect,UINT32 input_count) {
    return This->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count);
}
static inline void ID2D1DeviceContext7_FillOpacityMask(ID2D1DeviceContext7* This,ID2D1Bitmap *mask,ID2D1Brush *brush,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect);
}
/*** ID2D1DeviceContext1 methods ***/
static inline HRESULT ID2D1DeviceContext7_CreateFilledGeometryRealization(ID2D1DeviceContext7* This,ID2D1Geometry *geometry,float tolerance,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization);
}
static inline HRESULT ID2D1DeviceContext7_CreateStrokedGeometryRealization(ID2D1DeviceContext7* This,ID2D1Geometry *geometry,float tolerance,float stroke_width,ID2D1StrokeStyle *stroke_style,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization);
}
static inline void ID2D1DeviceContext7_DrawGeometryRealization(ID2D1DeviceContext7* This,ID2D1GeometryRealization *realization,ID2D1Brush *brush) {
    This->lpVtbl->DrawGeometryRealization(This,realization,brush);
}
/*** ID2D1DeviceContext2 methods ***/
static inline HRESULT ID2D1DeviceContext7_CreateInk(ID2D1DeviceContext7* This,const D2D1_INK_POINT *start_point,ID2D1Ink **ink) {
    return This->lpVtbl->CreateInk(This,start_point,ink);
}
static inline HRESULT ID2D1DeviceContext7_CreateInkStyle(ID2D1DeviceContext7* This,const D2D1_INK_STYLE_PROPERTIES *ink_style_properties,ID2D1InkStyle **ink_style) {
    return This->lpVtbl->CreateInkStyle(This,ink_style_properties,ink_style);
}
static inline HRESULT ID2D1DeviceContext7_CreateGradientMesh(ID2D1DeviceContext7* This,const D2D1_GRADIENT_MESH_PATCH *patches,UINT32 patches_count,ID2D1GradientMesh **gradient_mesh) {
    return This->lpVtbl->CreateGradientMesh(This,patches,patches_count,gradient_mesh);
}
static inline HRESULT ID2D1DeviceContext7_CreateImageSourceFromWic(ID2D1DeviceContext7* This,IWICBitmapSource *wic_bitmap_source,D2D1_IMAGE_SOURCE_LOADING_OPTIONS loading_options,D2D1_ALPHA_MODE alpha_mode,ID2D1ImageSourceFromWic **image_source) {
    return This->lpVtbl->CreateImageSourceFromWic(This,wic_bitmap_source,loading_options,alpha_mode,image_source);
}
static inline HRESULT ID2D1DeviceContext7_CreateLookupTable3D(ID2D1DeviceContext7* This,D2D1_BUFFER_PRECISION precision,const UINT32 *extents,const BYTE *data,UINT32 data_count,const UINT32 *strides,ID2D1LookupTable3D **lookup_table) {
    return This->lpVtbl->CreateLookupTable3D(This,precision,extents,data,data_count,strides,lookup_table);
}
static inline HRESULT ID2D1DeviceContext7_CreateImageSourceFromDxgi(ID2D1DeviceContext7* This,IDXGISurface **surfaces,UINT32 surface_count,DXGI_COLOR_SPACE_TYPE color_space,D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,ID2D1ImageSource **image_source) {
    return This->lpVtbl->CreateImageSourceFromDxgi(This,surfaces,surface_count,color_space,options,image_source);
}
static inline HRESULT ID2D1DeviceContext7_GetGradientMeshWorldBounds(ID2D1DeviceContext7* This,ID2D1GradientMesh *gradient_mesh,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGradientMeshWorldBounds(This,gradient_mesh,bounds);
}
static inline void ID2D1DeviceContext7_DrawInk(ID2D1DeviceContext7* This,ID2D1Ink *ink,ID2D1Brush *brush,ID2D1InkStyle *ink_style) {
    This->lpVtbl->DrawInk(This,ink,brush,ink_style);
}
static inline void ID2D1DeviceContext7_DrawGradientMesh(ID2D1DeviceContext7* This,ID2D1GradientMesh *gradient_mesh) {
    This->lpVtbl->DrawGradientMesh(This,gradient_mesh);
}
static inline void ID2D1DeviceContext7_DrawGdiMetafile(ID2D1DeviceContext7* This,ID2D1GdiMetafile *gdi_metafile,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext2_DrawGdiMetafile(This,gdi_metafile,dst_rect,src_rect);
}
static inline HRESULT ID2D1DeviceContext7_CreateTransformedImageSource(ID2D1DeviceContext7* This,ID2D1ImageSource *source,const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES *props,ID2D1TransformedImageSource **transformed) {
    return This->lpVtbl->CreateTransformedImageSource(This,source,props,transformed);
}
/*** ID2D1DeviceContext3 methods ***/
static inline HRESULT ID2D1DeviceContext7_CreateSpriteBatch(ID2D1DeviceContext7* This,ID2D1SpriteBatch **sprite_batch) {
    return This->lpVtbl->CreateSpriteBatch(This,sprite_batch);
}
static inline void ID2D1DeviceContext7_DrawSpriteBatch(ID2D1DeviceContext7* This,ID2D1SpriteBatch *sprite_batch,UINT32 start_index,UINT32 sprite_count,ID2D1Bitmap *bitmap,D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,D2D1_SPRITE_OPTIONS sprite_options) {
    This->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options);
}
/*** ID2D1DeviceContext4 methods ***/
static inline HRESULT ID2D1DeviceContext7_CreateSvgGlyphStyle(ID2D1DeviceContext7* This,ID2D1SvgGlyphStyle **svg_glyph_style) {
    return This->lpVtbl->CreateSvgGlyphStyle(This,svg_glyph_style);
}
static inline void ID2D1DeviceContext7_DrawText(ID2D1DeviceContext7* This,const WCHAR *string,UINT32 string_length,IDWriteTextFormat *text_format,const D2D1_RECT_F *layout_rect,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,D2D1_DRAW_TEXT_OPTIONS options,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->ID2D1DeviceContext4_DrawText(This,string,string_length,text_format,layout_rect,default_fill_brush,svg_glyph_style,color_palette_index,options,measuring_mode);
}
static inline void ID2D1DeviceContext7_DrawTextLayout(ID2D1DeviceContext7* This,D2D1_POINT_2F origin,IDWriteTextLayout *text_layout,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,D2D1_DRAW_TEXT_OPTIONS options) {
    This->lpVtbl->ID2D1DeviceContext4_DrawTextLayout(This,origin,text_layout,default_fill_brush,svg_glyph_style,color_palette_index,options);
}
static inline void ID2D1DeviceContext7_DrawColorBitmapGlyphRun(ID2D1DeviceContext7* This,DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,DWRITE_MEASURING_MODE measuring_mode,D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION bitmap_snap_option) {
    This->lpVtbl->DrawColorBitmapGlyphRun(This,glyph_image_format,baseline_origin,glyph_run,measuring_mode,bitmap_snap_option);
}
static inline void ID2D1DeviceContext7_DrawSvgGlyphRun(ID2D1DeviceContext7* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->DrawSvgGlyphRun(This,baseline_origin,glyph_run,default_fill_brush,svg_glyph_style,color_palette_index,measuring_mode);
}
static inline HRESULT ID2D1DeviceContext7_GetColorBitmapGlyphImage(ID2D1DeviceContext7* This,DWRITE_GLYPH_IMAGE_FORMATS glyph_image_format,D2D1_POINT_2F glyph_origin,IDWriteFontFace *font_face,FLOAT font_em_size,UINT16 glyph_index,BOOL is_sideways,const D2D1_MATRIX_3X2_F *world_transform,FLOAT dpi_x,FLOAT dpi_y,D2D1_MATRIX_3X2_F *glyph_transform,ID2D1Image **glyph_image) {
    return This->lpVtbl->GetColorBitmapGlyphImage(This,glyph_image_format,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,dpi_x,dpi_y,glyph_transform,glyph_image);
}
static inline HRESULT ID2D1DeviceContext7_GetSvgGlyphImage(ID2D1DeviceContext7* This,D2D1_POINT_2F glyph_origin,IDWriteFontFace *font_face,FLOAT font_em_size,UINT16 glyph_index,BOOL is_sideways,const D2D1_MATRIX_3X2_F *world_transform,ID2D1Brush *default_fill_brush,ID2D1SvgGlyphStyle *svg_glyph_style,UINT32 color_palette_index,D2D1_MATRIX_3X2_F *glyph_transform,ID2D1CommandList **glyph_image) {
    return This->lpVtbl->GetSvgGlyphImage(This,glyph_origin,font_face,font_em_size,glyph_index,is_sideways,world_transform,default_fill_brush,svg_glyph_style,color_palette_index,glyph_transform,glyph_image);
}
/*** ID2D1DeviceContext5 methods ***/
static inline HRESULT ID2D1DeviceContext7_CreateSvgDocument(ID2D1DeviceContext7* This,IStream *input_xml_stream,D2D1_SIZE_F viewport_size,ID2D1SvgDocument **svg_document) {
    return This->lpVtbl->CreateSvgDocument(This,input_xml_stream,viewport_size,svg_document);
}
static inline void ID2D1DeviceContext7_DrawSvgDocument(ID2D1DeviceContext7* This,ID2D1SvgDocument *svg_document) {
    This->lpVtbl->DrawSvgDocument(This,svg_document);
}
static inline HRESULT ID2D1DeviceContext7_CreateColorContextFromDxgiColorSpace(ID2D1DeviceContext7* This,DXGI_COLOR_SPACE_TYPE color_space,ID2D1ColorContext1 **color_context) {
    return This->lpVtbl->CreateColorContextFromDxgiColorSpace(This,color_space,color_context);
}
static inline HRESULT ID2D1DeviceContext7_CreateColorContextFromSimpleColorProfile(ID2D1DeviceContext7* This,const D2D1_SIMPLE_COLOR_PROFILE *simple_profile,ID2D1ColorContext1 **color_context) {
    return This->lpVtbl->CreateColorContextFromSimpleColorProfile(This,simple_profile,color_context);
}
/*** ID2D1DeviceContext6 methods ***/
static inline void ID2D1DeviceContext7_BlendImage(ID2D1DeviceContext7* This,ID2D1Image *image,D2D1_BLEND_MODE blend_mode,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode) {
    This->lpVtbl->BlendImage(This,image,blend_mode,target_offset,image_rect,interpolation_mode);
}
/*** ID2D1DeviceContext7 methods ***/
static inline DWRITE_PAINT_FEATURE_LEVEL ID2D1DeviceContext7_GetPaintFeatureLevel(ID2D1DeviceContext7* This) {
    return This->lpVtbl->GetPaintFeatureLevel(This);
}
static inline void ID2D1DeviceContext7_DrawPaintGlyphRun(ID2D1DeviceContext7* This,D2D1_POINT_2F origin,const DWRITE_GLYPH_RUN *run,ID2D1Brush *brush,UINT32 palette_index,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->DrawPaintGlyphRun(This,origin,run,brush,palette_index,measuring_mode);
}
static inline void ID2D1DeviceContext7_DrawGlyphRunWithColorSupport(ID2D1DeviceContext7* This,D2D1_POINT_2F origin,const DWRITE_GLYPH_RUN *run,const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,ID2D1Brush *brush,ID2D1SvgGlyphStyle *style,UINT32 palette_index,DWRITE_MEASURING_MODE measuring_mode,D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION snap_option) {
    This->lpVtbl->DrawGlyphRunWithColorSupport(This,origin,run,run_desc,brush,style,palette_index,measuring_mode,snap_option);
}
#endif
#endif

#endif


#endif  /* __ID2D1DeviceContext7_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Device2 interface
 */
#ifndef __ID2D1Device2_INTERFACE_DEFINED__
#define __ID2D1Device2_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Device2, 0xa44472e1, 0x8dfb, 0x4e60, 0x84,0x92, 0x6e,0x28,0x61,0xc9,0xca,0x8b);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a44472e1-8dfb-4e60-8492-6e2861c9ca8b")
ID2D1Device2 : public ID2D1Device1
{
    virtual HRESULT STDMETHODCALLTYPE CreateDeviceContext(
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext2 **context) = 0;

    virtual void STDMETHODCALLTYPE FlushDeviceContexts(
        ID2D1Bitmap *bitmap) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDxgiDevice(
        IDXGIDevice **dxgi_device) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Device2, 0xa44472e1, 0x8dfb, 0x4e60, 0x84,0x92, 0x6e,0x28,0x61,0xc9,0xca,0x8b)
#endif
#else
typedef struct ID2D1Device2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Device2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Device2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Device2 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1Device2 *This,
        ID2D1Factory **factory);

    /*** ID2D1Device methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDeviceContext)(
        ID2D1Device2 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext **context);

    HRESULT (STDMETHODCALLTYPE *CreatePrintControl)(
        ID2D1Device2 *This,
        IWICImagingFactory *wic_factory,
        IPrintDocumentPackageTarget *document_target,
        const D2D1_PRINT_CONTROL_PROPERTIES *desc,
        ID2D1PrintControl **print_control);

    void (STDMETHODCALLTYPE *SetMaximumTextureMemory)(
        ID2D1Device2 *This,
        UINT64 max_texture_memory);

    UINT64 (STDMETHODCALLTYPE *GetMaximumTextureMemory)(
        ID2D1Device2 *This);

    HRESULT (STDMETHODCALLTYPE *ClearResources)(
        ID2D1Device2 *This,
        UINT msec_since_use);

    /*** ID2D1Device1 methods ***/
    D2D1_RENDERING_PRIORITY (STDMETHODCALLTYPE *GetRenderingPriority)(
        ID2D1Device2 *This);

    void (STDMETHODCALLTYPE *SetRenderingPriority)(
        ID2D1Device2 *This,
        D2D1_RENDERING_PRIORITY priority);

    HRESULT (STDMETHODCALLTYPE *ID2D1Device1_CreateDeviceContext)(
        ID2D1Device2 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext1 **device_context);

    /*** ID2D1Device2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device2_CreateDeviceContext)(
        ID2D1Device2 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext2 **context);

    void (STDMETHODCALLTYPE *FlushDeviceContexts)(
        ID2D1Device2 *This,
        ID2D1Bitmap *bitmap);

    HRESULT (STDMETHODCALLTYPE *GetDxgiDevice)(
        ID2D1Device2 *This,
        IDXGIDevice **dxgi_device);

    END_INTERFACE
} ID2D1Device2Vtbl;

interface ID2D1Device2 {
    CONST_VTBL ID2D1Device2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Device2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Device2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Device2_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Device2_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Device methods ***/
#define ID2D1Device2_CreatePrintControl(This,wic_factory,document_target,desc,print_control) (This)->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control)
#define ID2D1Device2_SetMaximumTextureMemory(This,max_texture_memory) (This)->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory)
#define ID2D1Device2_GetMaximumTextureMemory(This) (This)->lpVtbl->GetMaximumTextureMemory(This)
#define ID2D1Device2_ClearResources(This,msec_since_use) (This)->lpVtbl->ClearResources(This,msec_since_use)
/*** ID2D1Device1 methods ***/
#define ID2D1Device2_GetRenderingPriority(This) (This)->lpVtbl->GetRenderingPriority(This)
#define ID2D1Device2_SetRenderingPriority(This,priority) (This)->lpVtbl->SetRenderingPriority(This,priority)
/*** ID2D1Device2 methods ***/
#define ID2D1Device2_CreateDeviceContext(This,options,context) (This)->lpVtbl->ID2D1Device2_CreateDeviceContext(This,options,context)
#define ID2D1Device2_FlushDeviceContexts(This,bitmap) (This)->lpVtbl->FlushDeviceContexts(This,bitmap)
#define ID2D1Device2_GetDxgiDevice(This,dxgi_device) (This)->lpVtbl->GetDxgiDevice(This,dxgi_device)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Device2_QueryInterface(ID2D1Device2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Device2_AddRef(ID2D1Device2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Device2_Release(ID2D1Device2* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1Device2_GetFactory(ID2D1Device2* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Device methods ***/
static inline HRESULT ID2D1Device2_CreatePrintControl(ID2D1Device2* This,IWICImagingFactory *wic_factory,IPrintDocumentPackageTarget *document_target,const D2D1_PRINT_CONTROL_PROPERTIES *desc,ID2D1PrintControl **print_control) {
    return This->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control);
}
static inline void ID2D1Device2_SetMaximumTextureMemory(ID2D1Device2* This,UINT64 max_texture_memory) {
    This->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory);
}
static inline UINT64 ID2D1Device2_GetMaximumTextureMemory(ID2D1Device2* This) {
    return This->lpVtbl->GetMaximumTextureMemory(This);
}
static inline HRESULT ID2D1Device2_ClearResources(ID2D1Device2* This,UINT msec_since_use) {
    return This->lpVtbl->ClearResources(This,msec_since_use);
}
/*** ID2D1Device1 methods ***/
static inline D2D1_RENDERING_PRIORITY ID2D1Device2_GetRenderingPriority(ID2D1Device2* This) {
    return This->lpVtbl->GetRenderingPriority(This);
}
static inline void ID2D1Device2_SetRenderingPriority(ID2D1Device2* This,D2D1_RENDERING_PRIORITY priority) {
    This->lpVtbl->SetRenderingPriority(This,priority);
}
/*** ID2D1Device2 methods ***/
static inline HRESULT ID2D1Device2_CreateDeviceContext(ID2D1Device2* This,D2D1_DEVICE_CONTEXT_OPTIONS options,ID2D1DeviceContext2 **context) {
    return This->lpVtbl->ID2D1Device2_CreateDeviceContext(This,options,context);
}
static inline void ID2D1Device2_FlushDeviceContexts(ID2D1Device2* This,ID2D1Bitmap *bitmap) {
    This->lpVtbl->FlushDeviceContexts(This,bitmap);
}
static inline HRESULT ID2D1Device2_GetDxgiDevice(ID2D1Device2* This,IDXGIDevice **dxgi_device) {
    return This->lpVtbl->GetDxgiDevice(This,dxgi_device);
}
#endif
#endif

#endif


#endif  /* __ID2D1Device2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Device3 interface
 */
#ifndef __ID2D1Device3_INTERFACE_DEFINED__
#define __ID2D1Device3_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Device3, 0x852f2087, 0x802c, 0x4037, 0xab,0x60, 0xff,0x2e,0x7e,0xe6,0xfc,0x01);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("852f2087-802c-4037-ab60-ff2e7ee6fc01")
ID2D1Device3 : public ID2D1Device2
{
    virtual HRESULT STDMETHODCALLTYPE CreateDeviceContext(
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext3 **context) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Device3, 0x852f2087, 0x802c, 0x4037, 0xab,0x60, 0xff,0x2e,0x7e,0xe6,0xfc,0x01)
#endif
#else
typedef struct ID2D1Device3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Device3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Device3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Device3 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1Device3 *This,
        ID2D1Factory **factory);

    /*** ID2D1Device methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDeviceContext)(
        ID2D1Device3 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext **context);

    HRESULT (STDMETHODCALLTYPE *CreatePrintControl)(
        ID2D1Device3 *This,
        IWICImagingFactory *wic_factory,
        IPrintDocumentPackageTarget *document_target,
        const D2D1_PRINT_CONTROL_PROPERTIES *desc,
        ID2D1PrintControl **print_control);

    void (STDMETHODCALLTYPE *SetMaximumTextureMemory)(
        ID2D1Device3 *This,
        UINT64 max_texture_memory);

    UINT64 (STDMETHODCALLTYPE *GetMaximumTextureMemory)(
        ID2D1Device3 *This);

    HRESULT (STDMETHODCALLTYPE *ClearResources)(
        ID2D1Device3 *This,
        UINT msec_since_use);

    /*** ID2D1Device1 methods ***/
    D2D1_RENDERING_PRIORITY (STDMETHODCALLTYPE *GetRenderingPriority)(
        ID2D1Device3 *This);

    void (STDMETHODCALLTYPE *SetRenderingPriority)(
        ID2D1Device3 *This,
        D2D1_RENDERING_PRIORITY priority);

    HRESULT (STDMETHODCALLTYPE *ID2D1Device1_CreateDeviceContext)(
        ID2D1Device3 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext1 **device_context);

    /*** ID2D1Device2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device2_CreateDeviceContext)(
        ID2D1Device3 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext2 **context);

    void (STDMETHODCALLTYPE *FlushDeviceContexts)(
        ID2D1Device3 *This,
        ID2D1Bitmap *bitmap);

    HRESULT (STDMETHODCALLTYPE *GetDxgiDevice)(
        ID2D1Device3 *This,
        IDXGIDevice **dxgi_device);

    /*** ID2D1Device3 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device3_CreateDeviceContext)(
        ID2D1Device3 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext3 **context);

    END_INTERFACE
} ID2D1Device3Vtbl;

interface ID2D1Device3 {
    CONST_VTBL ID2D1Device3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Device3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Device3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Device3_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Device3_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Device methods ***/
#define ID2D1Device3_CreatePrintControl(This,wic_factory,document_target,desc,print_control) (This)->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control)
#define ID2D1Device3_SetMaximumTextureMemory(This,max_texture_memory) (This)->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory)
#define ID2D1Device3_GetMaximumTextureMemory(This) (This)->lpVtbl->GetMaximumTextureMemory(This)
#define ID2D1Device3_ClearResources(This,msec_since_use) (This)->lpVtbl->ClearResources(This,msec_since_use)
/*** ID2D1Device1 methods ***/
#define ID2D1Device3_GetRenderingPriority(This) (This)->lpVtbl->GetRenderingPriority(This)
#define ID2D1Device3_SetRenderingPriority(This,priority) (This)->lpVtbl->SetRenderingPriority(This,priority)
/*** ID2D1Device2 methods ***/
#define ID2D1Device3_FlushDeviceContexts(This,bitmap) (This)->lpVtbl->FlushDeviceContexts(This,bitmap)
#define ID2D1Device3_GetDxgiDevice(This,dxgi_device) (This)->lpVtbl->GetDxgiDevice(This,dxgi_device)
/*** ID2D1Device3 methods ***/
#define ID2D1Device3_CreateDeviceContext(This,options,context) (This)->lpVtbl->ID2D1Device3_CreateDeviceContext(This,options,context)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Device3_QueryInterface(ID2D1Device3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Device3_AddRef(ID2D1Device3* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Device3_Release(ID2D1Device3* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1Device3_GetFactory(ID2D1Device3* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Device methods ***/
static inline HRESULT ID2D1Device3_CreatePrintControl(ID2D1Device3* This,IWICImagingFactory *wic_factory,IPrintDocumentPackageTarget *document_target,const D2D1_PRINT_CONTROL_PROPERTIES *desc,ID2D1PrintControl **print_control) {
    return This->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control);
}
static inline void ID2D1Device3_SetMaximumTextureMemory(ID2D1Device3* This,UINT64 max_texture_memory) {
    This->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory);
}
static inline UINT64 ID2D1Device3_GetMaximumTextureMemory(ID2D1Device3* This) {
    return This->lpVtbl->GetMaximumTextureMemory(This);
}
static inline HRESULT ID2D1Device3_ClearResources(ID2D1Device3* This,UINT msec_since_use) {
    return This->lpVtbl->ClearResources(This,msec_since_use);
}
/*** ID2D1Device1 methods ***/
static inline D2D1_RENDERING_PRIORITY ID2D1Device3_GetRenderingPriority(ID2D1Device3* This) {
    return This->lpVtbl->GetRenderingPriority(This);
}
static inline void ID2D1Device3_SetRenderingPriority(ID2D1Device3* This,D2D1_RENDERING_PRIORITY priority) {
    This->lpVtbl->SetRenderingPriority(This,priority);
}
/*** ID2D1Device2 methods ***/
static inline void ID2D1Device3_FlushDeviceContexts(ID2D1Device3* This,ID2D1Bitmap *bitmap) {
    This->lpVtbl->FlushDeviceContexts(This,bitmap);
}
static inline HRESULT ID2D1Device3_GetDxgiDevice(ID2D1Device3* This,IDXGIDevice **dxgi_device) {
    return This->lpVtbl->GetDxgiDevice(This,dxgi_device);
}
/*** ID2D1Device3 methods ***/
static inline HRESULT ID2D1Device3_CreateDeviceContext(ID2D1Device3* This,D2D1_DEVICE_CONTEXT_OPTIONS options,ID2D1DeviceContext3 **context) {
    return This->lpVtbl->ID2D1Device3_CreateDeviceContext(This,options,context);
}
#endif
#endif

#endif


#endif  /* __ID2D1Device3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Device4 interface
 */
#ifndef __ID2D1Device4_INTERFACE_DEFINED__
#define __ID2D1Device4_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Device4, 0xd7bdb159, 0x5683, 0x4a46, 0xbc,0x9c, 0x72,0xdc,0x72,0x0b,0x85,0x8b);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d7bdb159-5683-4a46-bc9c-72dc720b858b")
ID2D1Device4 : public ID2D1Device3
{
    virtual HRESULT STDMETHODCALLTYPE CreateDeviceContext(
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext4 **context) = 0;

    virtual void STDMETHODCALLTYPE SetMaximumColorGlyphCacheMemory(
        UINT64 size) = 0;

    virtual UINT64 STDMETHODCALLTYPE GetMaximumColorGlyphCacheMemory(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Device4, 0xd7bdb159, 0x5683, 0x4a46, 0xbc,0x9c, 0x72,0xdc,0x72,0x0b,0x85,0x8b)
#endif
#else
typedef struct ID2D1Device4Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Device4 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Device4 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Device4 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1Device4 *This,
        ID2D1Factory **factory);

    /*** ID2D1Device methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDeviceContext)(
        ID2D1Device4 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext **context);

    HRESULT (STDMETHODCALLTYPE *CreatePrintControl)(
        ID2D1Device4 *This,
        IWICImagingFactory *wic_factory,
        IPrintDocumentPackageTarget *document_target,
        const D2D1_PRINT_CONTROL_PROPERTIES *desc,
        ID2D1PrintControl **print_control);

    void (STDMETHODCALLTYPE *SetMaximumTextureMemory)(
        ID2D1Device4 *This,
        UINT64 max_texture_memory);

    UINT64 (STDMETHODCALLTYPE *GetMaximumTextureMemory)(
        ID2D1Device4 *This);

    HRESULT (STDMETHODCALLTYPE *ClearResources)(
        ID2D1Device4 *This,
        UINT msec_since_use);

    /*** ID2D1Device1 methods ***/
    D2D1_RENDERING_PRIORITY (STDMETHODCALLTYPE *GetRenderingPriority)(
        ID2D1Device4 *This);

    void (STDMETHODCALLTYPE *SetRenderingPriority)(
        ID2D1Device4 *This,
        D2D1_RENDERING_PRIORITY priority);

    HRESULT (STDMETHODCALLTYPE *ID2D1Device1_CreateDeviceContext)(
        ID2D1Device4 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext1 **device_context);

    /*** ID2D1Device2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device2_CreateDeviceContext)(
        ID2D1Device4 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext2 **context);

    void (STDMETHODCALLTYPE *FlushDeviceContexts)(
        ID2D1Device4 *This,
        ID2D1Bitmap *bitmap);

    HRESULT (STDMETHODCALLTYPE *GetDxgiDevice)(
        ID2D1Device4 *This,
        IDXGIDevice **dxgi_device);

    /*** ID2D1Device3 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device3_CreateDeviceContext)(
        ID2D1Device4 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext3 **context);

    /*** ID2D1Device4 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device4_CreateDeviceContext)(
        ID2D1Device4 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext4 **context);

    void (STDMETHODCALLTYPE *SetMaximumColorGlyphCacheMemory)(
        ID2D1Device4 *This,
        UINT64 size);

    UINT64 (STDMETHODCALLTYPE *GetMaximumColorGlyphCacheMemory)(
        ID2D1Device4 *This);

    END_INTERFACE
} ID2D1Device4Vtbl;

interface ID2D1Device4 {
    CONST_VTBL ID2D1Device4Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Device4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Device4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Device4_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Device4_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Device methods ***/
#define ID2D1Device4_CreatePrintControl(This,wic_factory,document_target,desc,print_control) (This)->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control)
#define ID2D1Device4_SetMaximumTextureMemory(This,max_texture_memory) (This)->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory)
#define ID2D1Device4_GetMaximumTextureMemory(This) (This)->lpVtbl->GetMaximumTextureMemory(This)
#define ID2D1Device4_ClearResources(This,msec_since_use) (This)->lpVtbl->ClearResources(This,msec_since_use)
/*** ID2D1Device1 methods ***/
#define ID2D1Device4_GetRenderingPriority(This) (This)->lpVtbl->GetRenderingPriority(This)
#define ID2D1Device4_SetRenderingPriority(This,priority) (This)->lpVtbl->SetRenderingPriority(This,priority)
/*** ID2D1Device2 methods ***/
#define ID2D1Device4_FlushDeviceContexts(This,bitmap) (This)->lpVtbl->FlushDeviceContexts(This,bitmap)
#define ID2D1Device4_GetDxgiDevice(This,dxgi_device) (This)->lpVtbl->GetDxgiDevice(This,dxgi_device)
/*** ID2D1Device3 methods ***/
/*** ID2D1Device4 methods ***/
#define ID2D1Device4_CreateDeviceContext(This,options,context) (This)->lpVtbl->ID2D1Device4_CreateDeviceContext(This,options,context)
#define ID2D1Device4_SetMaximumColorGlyphCacheMemory(This,size) (This)->lpVtbl->SetMaximumColorGlyphCacheMemory(This,size)
#define ID2D1Device4_GetMaximumColorGlyphCacheMemory(This) (This)->lpVtbl->GetMaximumColorGlyphCacheMemory(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Device4_QueryInterface(ID2D1Device4* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Device4_AddRef(ID2D1Device4* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Device4_Release(ID2D1Device4* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1Device4_GetFactory(ID2D1Device4* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Device methods ***/
static inline HRESULT ID2D1Device4_CreatePrintControl(ID2D1Device4* This,IWICImagingFactory *wic_factory,IPrintDocumentPackageTarget *document_target,const D2D1_PRINT_CONTROL_PROPERTIES *desc,ID2D1PrintControl **print_control) {
    return This->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control);
}
static inline void ID2D1Device4_SetMaximumTextureMemory(ID2D1Device4* This,UINT64 max_texture_memory) {
    This->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory);
}
static inline UINT64 ID2D1Device4_GetMaximumTextureMemory(ID2D1Device4* This) {
    return This->lpVtbl->GetMaximumTextureMemory(This);
}
static inline HRESULT ID2D1Device4_ClearResources(ID2D1Device4* This,UINT msec_since_use) {
    return This->lpVtbl->ClearResources(This,msec_since_use);
}
/*** ID2D1Device1 methods ***/
static inline D2D1_RENDERING_PRIORITY ID2D1Device4_GetRenderingPriority(ID2D1Device4* This) {
    return This->lpVtbl->GetRenderingPriority(This);
}
static inline void ID2D1Device4_SetRenderingPriority(ID2D1Device4* This,D2D1_RENDERING_PRIORITY priority) {
    This->lpVtbl->SetRenderingPriority(This,priority);
}
/*** ID2D1Device2 methods ***/
static inline void ID2D1Device4_FlushDeviceContexts(ID2D1Device4* This,ID2D1Bitmap *bitmap) {
    This->lpVtbl->FlushDeviceContexts(This,bitmap);
}
static inline HRESULT ID2D1Device4_GetDxgiDevice(ID2D1Device4* This,IDXGIDevice **dxgi_device) {
    return This->lpVtbl->GetDxgiDevice(This,dxgi_device);
}
/*** ID2D1Device3 methods ***/
/*** ID2D1Device4 methods ***/
static inline HRESULT ID2D1Device4_CreateDeviceContext(ID2D1Device4* This,D2D1_DEVICE_CONTEXT_OPTIONS options,ID2D1DeviceContext4 **context) {
    return This->lpVtbl->ID2D1Device4_CreateDeviceContext(This,options,context);
}
static inline void ID2D1Device4_SetMaximumColorGlyphCacheMemory(ID2D1Device4* This,UINT64 size) {
    This->lpVtbl->SetMaximumColorGlyphCacheMemory(This,size);
}
static inline UINT64 ID2D1Device4_GetMaximumColorGlyphCacheMemory(ID2D1Device4* This) {
    return This->lpVtbl->GetMaximumColorGlyphCacheMemory(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1Device4_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Device5 interface
 */
#ifndef __ID2D1Device5_INTERFACE_DEFINED__
#define __ID2D1Device5_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Device5, 0xd55ba0a4, 0x6405, 0x4694, 0xae,0xf5, 0x08,0xee,0x1a,0x43,0x58,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d55ba0a4-6405-4694-aef5-08ee1a4358b4")
ID2D1Device5 : public ID2D1Device4
{
    virtual HRESULT STDMETHODCALLTYPE CreateDeviceContext(
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext5 **context) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Device5, 0xd55ba0a4, 0x6405, 0x4694, 0xae,0xf5, 0x08,0xee,0x1a,0x43,0x58,0xb4)
#endif
#else
typedef struct ID2D1Device5Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Device5 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Device5 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Device5 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1Device5 *This,
        ID2D1Factory **factory);

    /*** ID2D1Device methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDeviceContext)(
        ID2D1Device5 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext **context);

    HRESULT (STDMETHODCALLTYPE *CreatePrintControl)(
        ID2D1Device5 *This,
        IWICImagingFactory *wic_factory,
        IPrintDocumentPackageTarget *document_target,
        const D2D1_PRINT_CONTROL_PROPERTIES *desc,
        ID2D1PrintControl **print_control);

    void (STDMETHODCALLTYPE *SetMaximumTextureMemory)(
        ID2D1Device5 *This,
        UINT64 max_texture_memory);

    UINT64 (STDMETHODCALLTYPE *GetMaximumTextureMemory)(
        ID2D1Device5 *This);

    HRESULT (STDMETHODCALLTYPE *ClearResources)(
        ID2D1Device5 *This,
        UINT msec_since_use);

    /*** ID2D1Device1 methods ***/
    D2D1_RENDERING_PRIORITY (STDMETHODCALLTYPE *GetRenderingPriority)(
        ID2D1Device5 *This);

    void (STDMETHODCALLTYPE *SetRenderingPriority)(
        ID2D1Device5 *This,
        D2D1_RENDERING_PRIORITY priority);

    HRESULT (STDMETHODCALLTYPE *ID2D1Device1_CreateDeviceContext)(
        ID2D1Device5 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext1 **device_context);

    /*** ID2D1Device2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device2_CreateDeviceContext)(
        ID2D1Device5 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext2 **context);

    void (STDMETHODCALLTYPE *FlushDeviceContexts)(
        ID2D1Device5 *This,
        ID2D1Bitmap *bitmap);

    HRESULT (STDMETHODCALLTYPE *GetDxgiDevice)(
        ID2D1Device5 *This,
        IDXGIDevice **dxgi_device);

    /*** ID2D1Device3 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device3_CreateDeviceContext)(
        ID2D1Device5 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext3 **context);

    /*** ID2D1Device4 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device4_CreateDeviceContext)(
        ID2D1Device5 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext4 **context);

    void (STDMETHODCALLTYPE *SetMaximumColorGlyphCacheMemory)(
        ID2D1Device5 *This,
        UINT64 size);

    UINT64 (STDMETHODCALLTYPE *GetMaximumColorGlyphCacheMemory)(
        ID2D1Device5 *This);

    /*** ID2D1Device5 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device5_CreateDeviceContext)(
        ID2D1Device5 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext5 **context);

    END_INTERFACE
} ID2D1Device5Vtbl;

interface ID2D1Device5 {
    CONST_VTBL ID2D1Device5Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Device5_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Device5_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Device5_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Device5_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Device methods ***/
#define ID2D1Device5_CreatePrintControl(This,wic_factory,document_target,desc,print_control) (This)->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control)
#define ID2D1Device5_SetMaximumTextureMemory(This,max_texture_memory) (This)->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory)
#define ID2D1Device5_GetMaximumTextureMemory(This) (This)->lpVtbl->GetMaximumTextureMemory(This)
#define ID2D1Device5_ClearResources(This,msec_since_use) (This)->lpVtbl->ClearResources(This,msec_since_use)
/*** ID2D1Device1 methods ***/
#define ID2D1Device5_GetRenderingPriority(This) (This)->lpVtbl->GetRenderingPriority(This)
#define ID2D1Device5_SetRenderingPriority(This,priority) (This)->lpVtbl->SetRenderingPriority(This,priority)
/*** ID2D1Device2 methods ***/
#define ID2D1Device5_FlushDeviceContexts(This,bitmap) (This)->lpVtbl->FlushDeviceContexts(This,bitmap)
#define ID2D1Device5_GetDxgiDevice(This,dxgi_device) (This)->lpVtbl->GetDxgiDevice(This,dxgi_device)
/*** ID2D1Device3 methods ***/
/*** ID2D1Device4 methods ***/
#define ID2D1Device5_SetMaximumColorGlyphCacheMemory(This,size) (This)->lpVtbl->SetMaximumColorGlyphCacheMemory(This,size)
#define ID2D1Device5_GetMaximumColorGlyphCacheMemory(This) (This)->lpVtbl->GetMaximumColorGlyphCacheMemory(This)
/*** ID2D1Device5 methods ***/
#define ID2D1Device5_CreateDeviceContext(This,options,context) (This)->lpVtbl->ID2D1Device5_CreateDeviceContext(This,options,context)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Device5_QueryInterface(ID2D1Device5* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Device5_AddRef(ID2D1Device5* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Device5_Release(ID2D1Device5* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1Device5_GetFactory(ID2D1Device5* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Device methods ***/
static inline HRESULT ID2D1Device5_CreatePrintControl(ID2D1Device5* This,IWICImagingFactory *wic_factory,IPrintDocumentPackageTarget *document_target,const D2D1_PRINT_CONTROL_PROPERTIES *desc,ID2D1PrintControl **print_control) {
    return This->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control);
}
static inline void ID2D1Device5_SetMaximumTextureMemory(ID2D1Device5* This,UINT64 max_texture_memory) {
    This->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory);
}
static inline UINT64 ID2D1Device5_GetMaximumTextureMemory(ID2D1Device5* This) {
    return This->lpVtbl->GetMaximumTextureMemory(This);
}
static inline HRESULT ID2D1Device5_ClearResources(ID2D1Device5* This,UINT msec_since_use) {
    return This->lpVtbl->ClearResources(This,msec_since_use);
}
/*** ID2D1Device1 methods ***/
static inline D2D1_RENDERING_PRIORITY ID2D1Device5_GetRenderingPriority(ID2D1Device5* This) {
    return This->lpVtbl->GetRenderingPriority(This);
}
static inline void ID2D1Device5_SetRenderingPriority(ID2D1Device5* This,D2D1_RENDERING_PRIORITY priority) {
    This->lpVtbl->SetRenderingPriority(This,priority);
}
/*** ID2D1Device2 methods ***/
static inline void ID2D1Device5_FlushDeviceContexts(ID2D1Device5* This,ID2D1Bitmap *bitmap) {
    This->lpVtbl->FlushDeviceContexts(This,bitmap);
}
static inline HRESULT ID2D1Device5_GetDxgiDevice(ID2D1Device5* This,IDXGIDevice **dxgi_device) {
    return This->lpVtbl->GetDxgiDevice(This,dxgi_device);
}
/*** ID2D1Device3 methods ***/
/*** ID2D1Device4 methods ***/
static inline void ID2D1Device5_SetMaximumColorGlyphCacheMemory(ID2D1Device5* This,UINT64 size) {
    This->lpVtbl->SetMaximumColorGlyphCacheMemory(This,size);
}
static inline UINT64 ID2D1Device5_GetMaximumColorGlyphCacheMemory(ID2D1Device5* This) {
    return This->lpVtbl->GetMaximumColorGlyphCacheMemory(This);
}
/*** ID2D1Device5 methods ***/
static inline HRESULT ID2D1Device5_CreateDeviceContext(ID2D1Device5* This,D2D1_DEVICE_CONTEXT_OPTIONS options,ID2D1DeviceContext5 **context) {
    return This->lpVtbl->ID2D1Device5_CreateDeviceContext(This,options,context);
}
#endif
#endif

#endif


#endif  /* __ID2D1Device5_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Device6 interface
 */
#ifndef __ID2D1Device6_INTERFACE_DEFINED__
#define __ID2D1Device6_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Device6, 0x7bfef914, 0x2d75, 0x4bad, 0xbe,0x87, 0xe1,0x8d,0xdb,0x07,0x7b,0x6d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7bfef914-2d75-4bad-be87-e18ddb077b6d")
ID2D1Device6 : public ID2D1Device5
{
    virtual HRESULT STDMETHODCALLTYPE CreateDeviceContext(
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext6 **context) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Device6, 0x7bfef914, 0x2d75, 0x4bad, 0xbe,0x87, 0xe1,0x8d,0xdb,0x07,0x7b,0x6d)
#endif
#else
typedef struct ID2D1Device6Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Device6 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Device6 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Device6 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1Device6 *This,
        ID2D1Factory **factory);

    /*** ID2D1Device methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDeviceContext)(
        ID2D1Device6 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext **context);

    HRESULT (STDMETHODCALLTYPE *CreatePrintControl)(
        ID2D1Device6 *This,
        IWICImagingFactory *wic_factory,
        IPrintDocumentPackageTarget *document_target,
        const D2D1_PRINT_CONTROL_PROPERTIES *desc,
        ID2D1PrintControl **print_control);

    void (STDMETHODCALLTYPE *SetMaximumTextureMemory)(
        ID2D1Device6 *This,
        UINT64 max_texture_memory);

    UINT64 (STDMETHODCALLTYPE *GetMaximumTextureMemory)(
        ID2D1Device6 *This);

    HRESULT (STDMETHODCALLTYPE *ClearResources)(
        ID2D1Device6 *This,
        UINT msec_since_use);

    /*** ID2D1Device1 methods ***/
    D2D1_RENDERING_PRIORITY (STDMETHODCALLTYPE *GetRenderingPriority)(
        ID2D1Device6 *This);

    void (STDMETHODCALLTYPE *SetRenderingPriority)(
        ID2D1Device6 *This,
        D2D1_RENDERING_PRIORITY priority);

    HRESULT (STDMETHODCALLTYPE *ID2D1Device1_CreateDeviceContext)(
        ID2D1Device6 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext1 **device_context);

    /*** ID2D1Device2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device2_CreateDeviceContext)(
        ID2D1Device6 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext2 **context);

    void (STDMETHODCALLTYPE *FlushDeviceContexts)(
        ID2D1Device6 *This,
        ID2D1Bitmap *bitmap);

    HRESULT (STDMETHODCALLTYPE *GetDxgiDevice)(
        ID2D1Device6 *This,
        IDXGIDevice **dxgi_device);

    /*** ID2D1Device3 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device3_CreateDeviceContext)(
        ID2D1Device6 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext3 **context);

    /*** ID2D1Device4 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device4_CreateDeviceContext)(
        ID2D1Device6 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext4 **context);

    void (STDMETHODCALLTYPE *SetMaximumColorGlyphCacheMemory)(
        ID2D1Device6 *This,
        UINT64 size);

    UINT64 (STDMETHODCALLTYPE *GetMaximumColorGlyphCacheMemory)(
        ID2D1Device6 *This);

    /*** ID2D1Device5 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device5_CreateDeviceContext)(
        ID2D1Device6 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext5 **context);

    /*** ID2D1Device6 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device6_CreateDeviceContext)(
        ID2D1Device6 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext6 **context);

    END_INTERFACE
} ID2D1Device6Vtbl;

interface ID2D1Device6 {
    CONST_VTBL ID2D1Device6Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Device6_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Device6_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Device6_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Device6_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Device methods ***/
#define ID2D1Device6_CreatePrintControl(This,wic_factory,document_target,desc,print_control) (This)->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control)
#define ID2D1Device6_SetMaximumTextureMemory(This,max_texture_memory) (This)->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory)
#define ID2D1Device6_GetMaximumTextureMemory(This) (This)->lpVtbl->GetMaximumTextureMemory(This)
#define ID2D1Device6_ClearResources(This,msec_since_use) (This)->lpVtbl->ClearResources(This,msec_since_use)
/*** ID2D1Device1 methods ***/
#define ID2D1Device6_GetRenderingPriority(This) (This)->lpVtbl->GetRenderingPriority(This)
#define ID2D1Device6_SetRenderingPriority(This,priority) (This)->lpVtbl->SetRenderingPriority(This,priority)
/*** ID2D1Device2 methods ***/
#define ID2D1Device6_FlushDeviceContexts(This,bitmap) (This)->lpVtbl->FlushDeviceContexts(This,bitmap)
#define ID2D1Device6_GetDxgiDevice(This,dxgi_device) (This)->lpVtbl->GetDxgiDevice(This,dxgi_device)
/*** ID2D1Device3 methods ***/
/*** ID2D1Device4 methods ***/
#define ID2D1Device6_SetMaximumColorGlyphCacheMemory(This,size) (This)->lpVtbl->SetMaximumColorGlyphCacheMemory(This,size)
#define ID2D1Device6_GetMaximumColorGlyphCacheMemory(This) (This)->lpVtbl->GetMaximumColorGlyphCacheMemory(This)
/*** ID2D1Device5 methods ***/
/*** ID2D1Device6 methods ***/
#define ID2D1Device6_CreateDeviceContext(This,options,context) (This)->lpVtbl->ID2D1Device6_CreateDeviceContext(This,options,context)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Device6_QueryInterface(ID2D1Device6* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Device6_AddRef(ID2D1Device6* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Device6_Release(ID2D1Device6* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1Device6_GetFactory(ID2D1Device6* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Device methods ***/
static inline HRESULT ID2D1Device6_CreatePrintControl(ID2D1Device6* This,IWICImagingFactory *wic_factory,IPrintDocumentPackageTarget *document_target,const D2D1_PRINT_CONTROL_PROPERTIES *desc,ID2D1PrintControl **print_control) {
    return This->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control);
}
static inline void ID2D1Device6_SetMaximumTextureMemory(ID2D1Device6* This,UINT64 max_texture_memory) {
    This->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory);
}
static inline UINT64 ID2D1Device6_GetMaximumTextureMemory(ID2D1Device6* This) {
    return This->lpVtbl->GetMaximumTextureMemory(This);
}
static inline HRESULT ID2D1Device6_ClearResources(ID2D1Device6* This,UINT msec_since_use) {
    return This->lpVtbl->ClearResources(This,msec_since_use);
}
/*** ID2D1Device1 methods ***/
static inline D2D1_RENDERING_PRIORITY ID2D1Device6_GetRenderingPriority(ID2D1Device6* This) {
    return This->lpVtbl->GetRenderingPriority(This);
}
static inline void ID2D1Device6_SetRenderingPriority(ID2D1Device6* This,D2D1_RENDERING_PRIORITY priority) {
    This->lpVtbl->SetRenderingPriority(This,priority);
}
/*** ID2D1Device2 methods ***/
static inline void ID2D1Device6_FlushDeviceContexts(ID2D1Device6* This,ID2D1Bitmap *bitmap) {
    This->lpVtbl->FlushDeviceContexts(This,bitmap);
}
static inline HRESULT ID2D1Device6_GetDxgiDevice(ID2D1Device6* This,IDXGIDevice **dxgi_device) {
    return This->lpVtbl->GetDxgiDevice(This,dxgi_device);
}
/*** ID2D1Device3 methods ***/
/*** ID2D1Device4 methods ***/
static inline void ID2D1Device6_SetMaximumColorGlyphCacheMemory(ID2D1Device6* This,UINT64 size) {
    This->lpVtbl->SetMaximumColorGlyphCacheMemory(This,size);
}
static inline UINT64 ID2D1Device6_GetMaximumColorGlyphCacheMemory(ID2D1Device6* This) {
    return This->lpVtbl->GetMaximumColorGlyphCacheMemory(This);
}
/*** ID2D1Device5 methods ***/
/*** ID2D1Device6 methods ***/
static inline HRESULT ID2D1Device6_CreateDeviceContext(ID2D1Device6* This,D2D1_DEVICE_CONTEXT_OPTIONS options,ID2D1DeviceContext6 **context) {
    return This->lpVtbl->ID2D1Device6_CreateDeviceContext(This,options,context);
}
#endif
#endif

#endif


#endif  /* __ID2D1Device6_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Device7 interface
 */
#ifndef __ID2D1Device7_INTERFACE_DEFINED__
#define __ID2D1Device7_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Device7, 0xf07c8968, 0xdd4e, 0x4ba6, 0x9c,0xbd, 0xeb,0x6d,0x37,0x52,0xdc,0xbb);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f07c8968-dd4e-4ba6-9cbd-eb6d3752dcbb")
ID2D1Device7 : public ID2D1Device6
{
    virtual HRESULT STDMETHODCALLTYPE CreateDeviceContext(
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext7 **context) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Device7, 0xf07c8968, 0xdd4e, 0x4ba6, 0x9c,0xbd, 0xeb,0x6d,0x37,0x52,0xdc,0xbb)
#endif
#else
typedef struct ID2D1Device7Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Device7 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Device7 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Device7 *This);

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1Device7 *This,
        ID2D1Factory **factory);

    /*** ID2D1Device methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDeviceContext)(
        ID2D1Device7 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext **context);

    HRESULT (STDMETHODCALLTYPE *CreatePrintControl)(
        ID2D1Device7 *This,
        IWICImagingFactory *wic_factory,
        IPrintDocumentPackageTarget *document_target,
        const D2D1_PRINT_CONTROL_PROPERTIES *desc,
        ID2D1PrintControl **print_control);

    void (STDMETHODCALLTYPE *SetMaximumTextureMemory)(
        ID2D1Device7 *This,
        UINT64 max_texture_memory);

    UINT64 (STDMETHODCALLTYPE *GetMaximumTextureMemory)(
        ID2D1Device7 *This);

    HRESULT (STDMETHODCALLTYPE *ClearResources)(
        ID2D1Device7 *This,
        UINT msec_since_use);

    /*** ID2D1Device1 methods ***/
    D2D1_RENDERING_PRIORITY (STDMETHODCALLTYPE *GetRenderingPriority)(
        ID2D1Device7 *This);

    void (STDMETHODCALLTYPE *SetRenderingPriority)(
        ID2D1Device7 *This,
        D2D1_RENDERING_PRIORITY priority);

    HRESULT (STDMETHODCALLTYPE *ID2D1Device1_CreateDeviceContext)(
        ID2D1Device7 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext1 **device_context);

    /*** ID2D1Device2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device2_CreateDeviceContext)(
        ID2D1Device7 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext2 **context);

    void (STDMETHODCALLTYPE *FlushDeviceContexts)(
        ID2D1Device7 *This,
        ID2D1Bitmap *bitmap);

    HRESULT (STDMETHODCALLTYPE *GetDxgiDevice)(
        ID2D1Device7 *This,
        IDXGIDevice **dxgi_device);

    /*** ID2D1Device3 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device3_CreateDeviceContext)(
        ID2D1Device7 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext3 **context);

    /*** ID2D1Device4 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device4_CreateDeviceContext)(
        ID2D1Device7 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext4 **context);

    void (STDMETHODCALLTYPE *SetMaximumColorGlyphCacheMemory)(
        ID2D1Device7 *This,
        UINT64 size);

    UINT64 (STDMETHODCALLTYPE *GetMaximumColorGlyphCacheMemory)(
        ID2D1Device7 *This);

    /*** ID2D1Device5 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device5_CreateDeviceContext)(
        ID2D1Device7 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext5 **context);

    /*** ID2D1Device6 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device6_CreateDeviceContext)(
        ID2D1Device7 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext6 **context);

    /*** ID2D1Device7 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Device7_CreateDeviceContext)(
        ID2D1Device7 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext7 **context);

    END_INTERFACE
} ID2D1Device7Vtbl;

interface ID2D1Device7 {
    CONST_VTBL ID2D1Device7Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Device7_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Device7_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Device7_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Device7_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Device methods ***/
#define ID2D1Device7_CreatePrintControl(This,wic_factory,document_target,desc,print_control) (This)->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control)
#define ID2D1Device7_SetMaximumTextureMemory(This,max_texture_memory) (This)->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory)
#define ID2D1Device7_GetMaximumTextureMemory(This) (This)->lpVtbl->GetMaximumTextureMemory(This)
#define ID2D1Device7_ClearResources(This,msec_since_use) (This)->lpVtbl->ClearResources(This,msec_since_use)
/*** ID2D1Device1 methods ***/
#define ID2D1Device7_GetRenderingPriority(This) (This)->lpVtbl->GetRenderingPriority(This)
#define ID2D1Device7_SetRenderingPriority(This,priority) (This)->lpVtbl->SetRenderingPriority(This,priority)
/*** ID2D1Device2 methods ***/
#define ID2D1Device7_FlushDeviceContexts(This,bitmap) (This)->lpVtbl->FlushDeviceContexts(This,bitmap)
#define ID2D1Device7_GetDxgiDevice(This,dxgi_device) (This)->lpVtbl->GetDxgiDevice(This,dxgi_device)
/*** ID2D1Device3 methods ***/
/*** ID2D1Device4 methods ***/
#define ID2D1Device7_SetMaximumColorGlyphCacheMemory(This,size) (This)->lpVtbl->SetMaximumColorGlyphCacheMemory(This,size)
#define ID2D1Device7_GetMaximumColorGlyphCacheMemory(This) (This)->lpVtbl->GetMaximumColorGlyphCacheMemory(This)
/*** ID2D1Device5 methods ***/
/*** ID2D1Device6 methods ***/
/*** ID2D1Device7 methods ***/
#define ID2D1Device7_CreateDeviceContext(This,options,context) (This)->lpVtbl->ID2D1Device7_CreateDeviceContext(This,options,context)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Device7_QueryInterface(ID2D1Device7* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Device7_AddRef(ID2D1Device7* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Device7_Release(ID2D1Device7* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1Device7_GetFactory(ID2D1Device7* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Device methods ***/
static inline HRESULT ID2D1Device7_CreatePrintControl(ID2D1Device7* This,IWICImagingFactory *wic_factory,IPrintDocumentPackageTarget *document_target,const D2D1_PRINT_CONTROL_PROPERTIES *desc,ID2D1PrintControl **print_control) {
    return This->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control);
}
static inline void ID2D1Device7_SetMaximumTextureMemory(ID2D1Device7* This,UINT64 max_texture_memory) {
    This->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory);
}
static inline UINT64 ID2D1Device7_GetMaximumTextureMemory(ID2D1Device7* This) {
    return This->lpVtbl->GetMaximumTextureMemory(This);
}
static inline HRESULT ID2D1Device7_ClearResources(ID2D1Device7* This,UINT msec_since_use) {
    return This->lpVtbl->ClearResources(This,msec_since_use);
}
/*** ID2D1Device1 methods ***/
static inline D2D1_RENDERING_PRIORITY ID2D1Device7_GetRenderingPriority(ID2D1Device7* This) {
    return This->lpVtbl->GetRenderingPriority(This);
}
static inline void ID2D1Device7_SetRenderingPriority(ID2D1Device7* This,D2D1_RENDERING_PRIORITY priority) {
    This->lpVtbl->SetRenderingPriority(This,priority);
}
/*** ID2D1Device2 methods ***/
static inline void ID2D1Device7_FlushDeviceContexts(ID2D1Device7* This,ID2D1Bitmap *bitmap) {
    This->lpVtbl->FlushDeviceContexts(This,bitmap);
}
static inline HRESULT ID2D1Device7_GetDxgiDevice(ID2D1Device7* This,IDXGIDevice **dxgi_device) {
    return This->lpVtbl->GetDxgiDevice(This,dxgi_device);
}
/*** ID2D1Device3 methods ***/
/*** ID2D1Device4 methods ***/
static inline void ID2D1Device7_SetMaximumColorGlyphCacheMemory(ID2D1Device7* This,UINT64 size) {
    This->lpVtbl->SetMaximumColorGlyphCacheMemory(This,size);
}
static inline UINT64 ID2D1Device7_GetMaximumColorGlyphCacheMemory(ID2D1Device7* This) {
    return This->lpVtbl->GetMaximumColorGlyphCacheMemory(This);
}
/*** ID2D1Device5 methods ***/
/*** ID2D1Device6 methods ***/
/*** ID2D1Device7 methods ***/
static inline HRESULT ID2D1Device7_CreateDeviceContext(ID2D1Device7* This,D2D1_DEVICE_CONTEXT_OPTIONS options,ID2D1DeviceContext7 **context) {
    return This->lpVtbl->ID2D1Device7_CreateDeviceContext(This,options,context);
}
#endif
#endif

#endif


#endif  /* __ID2D1Device7_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Factory3 interface
 */
#ifndef __ID2D1Factory3_INTERFACE_DEFINED__
#define __ID2D1Factory3_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Factory3, 0x0869759f, 0x4f00, 0x413f, 0xb0,0x3e, 0x2b,0xda,0x45,0x40,0x4d,0x0f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0869759f-4f00-413f-b03e-2bda45404d0f")
ID2D1Factory3 : public ID2D1Factory2
{
    virtual HRESULT STDMETHODCALLTYPE CreateDevice(
        IDXGIDevice *dxgi_device,
        ID2D1Device2 **d2d_device) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Factory3, 0x0869759f, 0x4f00, 0x413f, 0xb0,0x3e, 0x2b,0xda,0x45,0x40,0x4d,0x0f)
#endif
#else
typedef struct ID2D1Factory3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Factory3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Factory3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Factory3 *This);

    /*** ID2D1Factory methods ***/
    HRESULT (STDMETHODCALLTYPE *ReloadSystemMetrics)(
        ID2D1Factory3 *This);

    void (STDMETHODCALLTYPE *GetDesktopDpi)(
        ID2D1Factory3 *This,
        float *dpi_x,
        float *dpi_y);

    HRESULT (STDMETHODCALLTYPE *CreateRectangleGeometry)(
        ID2D1Factory3 *This,
        const D2D1_RECT_F *rect,
        ID2D1RectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateRoundedRectangleGeometry)(
        ID2D1Factory3 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1RoundedRectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateEllipseGeometry)(
        ID2D1Factory3 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1EllipseGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateGeometryGroup)(
        ID2D1Factory3 *This,
        D2D1_FILL_MODE fill_mode,
        ID2D1Geometry **geometries,
        UINT32 geometry_count,
        ID2D1GeometryGroup **group);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedGeometry)(
        ID2D1Factory3 *This,
        ID2D1Geometry *src_geometry,
        const D2D1_MATRIX_3X2_F *transform,
        ID2D1TransformedGeometry **transformed_geometry);

    HRESULT (STDMETHODCALLTYPE *CreatePathGeometry)(
        ID2D1Factory3 *This,
        ID2D1PathGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateStrokeStyle)(
        ID2D1Factory3 *This,
        const D2D1_STROKE_STYLE_PROPERTIES *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle **stroke_style);

    HRESULT (STDMETHODCALLTYPE *CreateDrawingStateBlock)(
        ID2D1Factory3 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateWicBitmapRenderTarget)(
        ID2D1Factory3 *This,
        IWICBitmap *target,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateHwndRenderTarget)(
        ID2D1Factory3 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,
        ID2D1HwndRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDxgiSurfaceRenderTarget)(
        ID2D1Factory3 *This,
        IDXGISurface *surface,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDCRenderTarget)(
        ID2D1Factory3 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1DCRenderTarget **render_target);

    /*** ID2D1Factory1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDevice)(
        ID2D1Factory3 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device **device);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateStrokeStyle)(
        ID2D1Factory3 *This,
        const D2D1_STROKE_STYLE_PROPERTIES1 *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle1 **stroke_style);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreatePathGeometry)(
        ID2D1Factory3 *This,
        ID2D1PathGeometry1 **geometry);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateDrawingStateBlock)(
        ID2D1Factory3 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock1 **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateGdiMetafile)(
        ID2D1Factory3 *This,
        IStream *stream,
        ID2D1GdiMetafile **metafile);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromStream)(
        ID2D1Factory3 *This,
        REFCLSID effect_id,
        IStream *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromString)(
        ID2D1Factory3 *This,
        REFCLSID effect_id,
        const WCHAR *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *UnregisterEffect)(
        ID2D1Factory3 *This,
        REFCLSID effect_id);

    HRESULT (STDMETHODCALLTYPE *GetRegisteredEffects)(
        ID2D1Factory3 *This,
        CLSID *effects,
        UINT32 effect_count,
        UINT32 *returned,
        UINT32 *registered);

    HRESULT (STDMETHODCALLTYPE *GetEffectProperties)(
        ID2D1Factory3 *This,
        REFCLSID effect_id,
        ID2D1Properties **props);

    /*** ID2D1Factory2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory2_CreateDevice)(
        ID2D1Factory3 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device1 **device);

    /*** ID2D1Factory3 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory3_CreateDevice)(
        ID2D1Factory3 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device2 **d2d_device);

    END_INTERFACE
} ID2D1Factory3Vtbl;

interface ID2D1Factory3 {
    CONST_VTBL ID2D1Factory3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Factory3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Factory3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Factory3_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Factory methods ***/
#define ID2D1Factory3_ReloadSystemMetrics(This) (This)->lpVtbl->ReloadSystemMetrics(This)
#define ID2D1Factory3_GetDesktopDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y)
#define ID2D1Factory3_CreateRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRectangleGeometry(This,rect,geometry)
#define ID2D1Factory3_CreateRoundedRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry)
#define ID2D1Factory3_CreateEllipseGeometry(This,ellipse,geometry) (This)->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry)
#define ID2D1Factory3_CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group) (This)->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group)
#define ID2D1Factory3_CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry) (This)->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry)
#define ID2D1Factory3_CreateWicBitmapRenderTarget(This,target,desc,render_target) (This)->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target)
#define ID2D1Factory3_CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target) (This)->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target)
#define ID2D1Factory3_CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target) (This)->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target)
#define ID2D1Factory3_CreateDCRenderTarget(This,desc,render_target) (This)->lpVtbl->CreateDCRenderTarget(This,desc,render_target)
/*** ID2D1Factory1 methods ***/
#define ID2D1Factory3_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style) (This)->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style)
#define ID2D1Factory3_CreatePathGeometry(This,geometry) (This)->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry)
#define ID2D1Factory3_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block) (This)->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block)
#define ID2D1Factory3_CreateGdiMetafile(This,stream,metafile) (This)->lpVtbl->CreateGdiMetafile(This,stream,metafile)
#define ID2D1Factory3_RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory3_RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory3_UnregisterEffect(This,effect_id) (This)->lpVtbl->UnregisterEffect(This,effect_id)
#define ID2D1Factory3_GetRegisteredEffects(This,effects,effect_count,returned,registered) (This)->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered)
#define ID2D1Factory3_GetEffectProperties(This,effect_id,props) (This)->lpVtbl->GetEffectProperties(This,effect_id,props)
/*** ID2D1Factory2 methods ***/
/*** ID2D1Factory3 methods ***/
#define ID2D1Factory3_CreateDevice(This,dxgi_device,d2d_device) (This)->lpVtbl->ID2D1Factory3_CreateDevice(This,dxgi_device,d2d_device)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Factory3_QueryInterface(ID2D1Factory3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Factory3_AddRef(ID2D1Factory3* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Factory3_Release(ID2D1Factory3* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Factory methods ***/
static inline HRESULT ID2D1Factory3_ReloadSystemMetrics(ID2D1Factory3* This) {
    return This->lpVtbl->ReloadSystemMetrics(This);
}
static inline void ID2D1Factory3_GetDesktopDpi(ID2D1Factory3* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y);
}
static inline HRESULT ID2D1Factory3_CreateRectangleGeometry(ID2D1Factory3* This,const D2D1_RECT_F *rect,ID2D1RectangleGeometry **geometry) {
    return This->lpVtbl->CreateRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory3_CreateRoundedRectangleGeometry(ID2D1Factory3* This,const D2D1_ROUNDED_RECT *rect,ID2D1RoundedRectangleGeometry **geometry) {
    return This->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory3_CreateEllipseGeometry(ID2D1Factory3* This,const D2D1_ELLIPSE *ellipse,ID2D1EllipseGeometry **geometry) {
    return This->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry);
}
static inline HRESULT ID2D1Factory3_CreateGeometryGroup(ID2D1Factory3* This,D2D1_FILL_MODE fill_mode,ID2D1Geometry **geometries,UINT32 geometry_count,ID2D1GeometryGroup **group) {
    return This->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group);
}
static inline HRESULT ID2D1Factory3_CreateTransformedGeometry(ID2D1Factory3* This,ID2D1Geometry *src_geometry,const D2D1_MATRIX_3X2_F *transform,ID2D1TransformedGeometry **transformed_geometry) {
    return This->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry);
}
static inline HRESULT ID2D1Factory3_CreateWicBitmapRenderTarget(ID2D1Factory3* This,IWICBitmap *target,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target);
}
static inline HRESULT ID2D1Factory3_CreateHwndRenderTarget(ID2D1Factory3* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,ID2D1HwndRenderTarget **render_target) {
    return This->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target);
}
static inline HRESULT ID2D1Factory3_CreateDxgiSurfaceRenderTarget(ID2D1Factory3* This,IDXGISurface *surface,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target);
}
static inline HRESULT ID2D1Factory3_CreateDCRenderTarget(ID2D1Factory3* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1DCRenderTarget **render_target) {
    return This->lpVtbl->CreateDCRenderTarget(This,desc,render_target);
}
/*** ID2D1Factory1 methods ***/
static inline HRESULT ID2D1Factory3_CreateStrokeStyle(ID2D1Factory3* This,const D2D1_STROKE_STYLE_PROPERTIES1 *desc,const float *dashes,UINT32 dash_count,ID2D1StrokeStyle1 **stroke_style) {
    return This->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style);
}
static inline HRESULT ID2D1Factory3_CreatePathGeometry(ID2D1Factory3* This,ID2D1PathGeometry1 **geometry) {
    return This->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry);
}
static inline HRESULT ID2D1Factory3_CreateDrawingStateBlock(ID2D1Factory3* This,const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,IDWriteRenderingParams *text_rendering_params,ID2D1DrawingStateBlock1 **state_block) {
    return This->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block);
}
static inline HRESULT ID2D1Factory3_CreateGdiMetafile(ID2D1Factory3* This,IStream *stream,ID2D1GdiMetafile **metafile) {
    return This->lpVtbl->CreateGdiMetafile(This,stream,metafile);
}
static inline HRESULT ID2D1Factory3_RegisterEffectFromStream(ID2D1Factory3* This,REFCLSID effect_id,IStream *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory3_RegisterEffectFromString(ID2D1Factory3* This,REFCLSID effect_id,const WCHAR *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory3_UnregisterEffect(ID2D1Factory3* This,REFCLSID effect_id) {
    return This->lpVtbl->UnregisterEffect(This,effect_id);
}
static inline HRESULT ID2D1Factory3_GetRegisteredEffects(ID2D1Factory3* This,CLSID *effects,UINT32 effect_count,UINT32 *returned,UINT32 *registered) {
    return This->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered);
}
static inline HRESULT ID2D1Factory3_GetEffectProperties(ID2D1Factory3* This,REFCLSID effect_id,ID2D1Properties **props) {
    return This->lpVtbl->GetEffectProperties(This,effect_id,props);
}
/*** ID2D1Factory2 methods ***/
/*** ID2D1Factory3 methods ***/
static inline HRESULT ID2D1Factory3_CreateDevice(ID2D1Factory3* This,IDXGIDevice *dxgi_device,ID2D1Device2 **d2d_device) {
    return This->lpVtbl->ID2D1Factory3_CreateDevice(This,dxgi_device,d2d_device);
}
#endif
#endif

#endif


#endif  /* __ID2D1Factory3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Factory4 interface
 */
#ifndef __ID2D1Factory4_INTERFACE_DEFINED__
#define __ID2D1Factory4_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Factory4, 0xbd4ec2d2, 0x0662, 0x4bee, 0xba,0x8e, 0x6f,0x29,0xf0,0x32,0xe0,0x96);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bd4ec2d2-0662-4bee-ba8e-6f29f032e096")
ID2D1Factory4 : public ID2D1Factory3
{
    virtual HRESULT STDMETHODCALLTYPE CreateDevice(
        IDXGIDevice *dxgi_device,
        ID2D1Device3 **d2d_device) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Factory4, 0xbd4ec2d2, 0x0662, 0x4bee, 0xba,0x8e, 0x6f,0x29,0xf0,0x32,0xe0,0x96)
#endif
#else
typedef struct ID2D1Factory4Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Factory4 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Factory4 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Factory4 *This);

    /*** ID2D1Factory methods ***/
    HRESULT (STDMETHODCALLTYPE *ReloadSystemMetrics)(
        ID2D1Factory4 *This);

    void (STDMETHODCALLTYPE *GetDesktopDpi)(
        ID2D1Factory4 *This,
        float *dpi_x,
        float *dpi_y);

    HRESULT (STDMETHODCALLTYPE *CreateRectangleGeometry)(
        ID2D1Factory4 *This,
        const D2D1_RECT_F *rect,
        ID2D1RectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateRoundedRectangleGeometry)(
        ID2D1Factory4 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1RoundedRectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateEllipseGeometry)(
        ID2D1Factory4 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1EllipseGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateGeometryGroup)(
        ID2D1Factory4 *This,
        D2D1_FILL_MODE fill_mode,
        ID2D1Geometry **geometries,
        UINT32 geometry_count,
        ID2D1GeometryGroup **group);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedGeometry)(
        ID2D1Factory4 *This,
        ID2D1Geometry *src_geometry,
        const D2D1_MATRIX_3X2_F *transform,
        ID2D1TransformedGeometry **transformed_geometry);

    HRESULT (STDMETHODCALLTYPE *CreatePathGeometry)(
        ID2D1Factory4 *This,
        ID2D1PathGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateStrokeStyle)(
        ID2D1Factory4 *This,
        const D2D1_STROKE_STYLE_PROPERTIES *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle **stroke_style);

    HRESULT (STDMETHODCALLTYPE *CreateDrawingStateBlock)(
        ID2D1Factory4 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateWicBitmapRenderTarget)(
        ID2D1Factory4 *This,
        IWICBitmap *target,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateHwndRenderTarget)(
        ID2D1Factory4 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,
        ID2D1HwndRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDxgiSurfaceRenderTarget)(
        ID2D1Factory4 *This,
        IDXGISurface *surface,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDCRenderTarget)(
        ID2D1Factory4 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1DCRenderTarget **render_target);

    /*** ID2D1Factory1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDevice)(
        ID2D1Factory4 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device **device);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateStrokeStyle)(
        ID2D1Factory4 *This,
        const D2D1_STROKE_STYLE_PROPERTIES1 *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle1 **stroke_style);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreatePathGeometry)(
        ID2D1Factory4 *This,
        ID2D1PathGeometry1 **geometry);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateDrawingStateBlock)(
        ID2D1Factory4 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock1 **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateGdiMetafile)(
        ID2D1Factory4 *This,
        IStream *stream,
        ID2D1GdiMetafile **metafile);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromStream)(
        ID2D1Factory4 *This,
        REFCLSID effect_id,
        IStream *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromString)(
        ID2D1Factory4 *This,
        REFCLSID effect_id,
        const WCHAR *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *UnregisterEffect)(
        ID2D1Factory4 *This,
        REFCLSID effect_id);

    HRESULT (STDMETHODCALLTYPE *GetRegisteredEffects)(
        ID2D1Factory4 *This,
        CLSID *effects,
        UINT32 effect_count,
        UINT32 *returned,
        UINT32 *registered);

    HRESULT (STDMETHODCALLTYPE *GetEffectProperties)(
        ID2D1Factory4 *This,
        REFCLSID effect_id,
        ID2D1Properties **props);

    /*** ID2D1Factory2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory2_CreateDevice)(
        ID2D1Factory4 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device1 **device);

    /*** ID2D1Factory3 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory3_CreateDevice)(
        ID2D1Factory4 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device2 **d2d_device);

    /*** ID2D1Factory4 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory4_CreateDevice)(
        ID2D1Factory4 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device3 **d2d_device);

    END_INTERFACE
} ID2D1Factory4Vtbl;

interface ID2D1Factory4 {
    CONST_VTBL ID2D1Factory4Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Factory4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Factory4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Factory4_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Factory methods ***/
#define ID2D1Factory4_ReloadSystemMetrics(This) (This)->lpVtbl->ReloadSystemMetrics(This)
#define ID2D1Factory4_GetDesktopDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y)
#define ID2D1Factory4_CreateRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRectangleGeometry(This,rect,geometry)
#define ID2D1Factory4_CreateRoundedRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry)
#define ID2D1Factory4_CreateEllipseGeometry(This,ellipse,geometry) (This)->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry)
#define ID2D1Factory4_CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group) (This)->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group)
#define ID2D1Factory4_CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry) (This)->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry)
#define ID2D1Factory4_CreateWicBitmapRenderTarget(This,target,desc,render_target) (This)->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target)
#define ID2D1Factory4_CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target) (This)->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target)
#define ID2D1Factory4_CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target) (This)->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target)
#define ID2D1Factory4_CreateDCRenderTarget(This,desc,render_target) (This)->lpVtbl->CreateDCRenderTarget(This,desc,render_target)
/*** ID2D1Factory1 methods ***/
#define ID2D1Factory4_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style) (This)->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style)
#define ID2D1Factory4_CreatePathGeometry(This,geometry) (This)->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry)
#define ID2D1Factory4_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block) (This)->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block)
#define ID2D1Factory4_CreateGdiMetafile(This,stream,metafile) (This)->lpVtbl->CreateGdiMetafile(This,stream,metafile)
#define ID2D1Factory4_RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory4_RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory4_UnregisterEffect(This,effect_id) (This)->lpVtbl->UnregisterEffect(This,effect_id)
#define ID2D1Factory4_GetRegisteredEffects(This,effects,effect_count,returned,registered) (This)->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered)
#define ID2D1Factory4_GetEffectProperties(This,effect_id,props) (This)->lpVtbl->GetEffectProperties(This,effect_id,props)
/*** ID2D1Factory2 methods ***/
/*** ID2D1Factory3 methods ***/
/*** ID2D1Factory4 methods ***/
#define ID2D1Factory4_CreateDevice(This,dxgi_device,d2d_device) (This)->lpVtbl->ID2D1Factory4_CreateDevice(This,dxgi_device,d2d_device)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Factory4_QueryInterface(ID2D1Factory4* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Factory4_AddRef(ID2D1Factory4* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Factory4_Release(ID2D1Factory4* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Factory methods ***/
static inline HRESULT ID2D1Factory4_ReloadSystemMetrics(ID2D1Factory4* This) {
    return This->lpVtbl->ReloadSystemMetrics(This);
}
static inline void ID2D1Factory4_GetDesktopDpi(ID2D1Factory4* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y);
}
static inline HRESULT ID2D1Factory4_CreateRectangleGeometry(ID2D1Factory4* This,const D2D1_RECT_F *rect,ID2D1RectangleGeometry **geometry) {
    return This->lpVtbl->CreateRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory4_CreateRoundedRectangleGeometry(ID2D1Factory4* This,const D2D1_ROUNDED_RECT *rect,ID2D1RoundedRectangleGeometry **geometry) {
    return This->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory4_CreateEllipseGeometry(ID2D1Factory4* This,const D2D1_ELLIPSE *ellipse,ID2D1EllipseGeometry **geometry) {
    return This->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry);
}
static inline HRESULT ID2D1Factory4_CreateGeometryGroup(ID2D1Factory4* This,D2D1_FILL_MODE fill_mode,ID2D1Geometry **geometries,UINT32 geometry_count,ID2D1GeometryGroup **group) {
    return This->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group);
}
static inline HRESULT ID2D1Factory4_CreateTransformedGeometry(ID2D1Factory4* This,ID2D1Geometry *src_geometry,const D2D1_MATRIX_3X2_F *transform,ID2D1TransformedGeometry **transformed_geometry) {
    return This->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry);
}
static inline HRESULT ID2D1Factory4_CreateWicBitmapRenderTarget(ID2D1Factory4* This,IWICBitmap *target,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target);
}
static inline HRESULT ID2D1Factory4_CreateHwndRenderTarget(ID2D1Factory4* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,ID2D1HwndRenderTarget **render_target) {
    return This->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target);
}
static inline HRESULT ID2D1Factory4_CreateDxgiSurfaceRenderTarget(ID2D1Factory4* This,IDXGISurface *surface,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target);
}
static inline HRESULT ID2D1Factory4_CreateDCRenderTarget(ID2D1Factory4* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1DCRenderTarget **render_target) {
    return This->lpVtbl->CreateDCRenderTarget(This,desc,render_target);
}
/*** ID2D1Factory1 methods ***/
static inline HRESULT ID2D1Factory4_CreateStrokeStyle(ID2D1Factory4* This,const D2D1_STROKE_STYLE_PROPERTIES1 *desc,const float *dashes,UINT32 dash_count,ID2D1StrokeStyle1 **stroke_style) {
    return This->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style);
}
static inline HRESULT ID2D1Factory4_CreatePathGeometry(ID2D1Factory4* This,ID2D1PathGeometry1 **geometry) {
    return This->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry);
}
static inline HRESULT ID2D1Factory4_CreateDrawingStateBlock(ID2D1Factory4* This,const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,IDWriteRenderingParams *text_rendering_params,ID2D1DrawingStateBlock1 **state_block) {
    return This->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block);
}
static inline HRESULT ID2D1Factory4_CreateGdiMetafile(ID2D1Factory4* This,IStream *stream,ID2D1GdiMetafile **metafile) {
    return This->lpVtbl->CreateGdiMetafile(This,stream,metafile);
}
static inline HRESULT ID2D1Factory4_RegisterEffectFromStream(ID2D1Factory4* This,REFCLSID effect_id,IStream *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory4_RegisterEffectFromString(ID2D1Factory4* This,REFCLSID effect_id,const WCHAR *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory4_UnregisterEffect(ID2D1Factory4* This,REFCLSID effect_id) {
    return This->lpVtbl->UnregisterEffect(This,effect_id);
}
static inline HRESULT ID2D1Factory4_GetRegisteredEffects(ID2D1Factory4* This,CLSID *effects,UINT32 effect_count,UINT32 *returned,UINT32 *registered) {
    return This->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered);
}
static inline HRESULT ID2D1Factory4_GetEffectProperties(ID2D1Factory4* This,REFCLSID effect_id,ID2D1Properties **props) {
    return This->lpVtbl->GetEffectProperties(This,effect_id,props);
}
/*** ID2D1Factory2 methods ***/
/*** ID2D1Factory3 methods ***/
/*** ID2D1Factory4 methods ***/
static inline HRESULT ID2D1Factory4_CreateDevice(ID2D1Factory4* This,IDXGIDevice *dxgi_device,ID2D1Device3 **d2d_device) {
    return This->lpVtbl->ID2D1Factory4_CreateDevice(This,dxgi_device,d2d_device);
}
#endif
#endif

#endif


#endif  /* __ID2D1Factory4_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Factory5 interface
 */
#ifndef __ID2D1Factory5_INTERFACE_DEFINED__
#define __ID2D1Factory5_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Factory5, 0xc4349994, 0x838e, 0x4b0f, 0x8c,0xab, 0x44,0x99,0x7d,0x9e,0xea,0xcc);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c4349994-838e-4b0f-8cab-44997d9eeacc")
ID2D1Factory5 : public ID2D1Factory4
{
    virtual HRESULT STDMETHODCALLTYPE CreateDevice(
        IDXGIDevice *dxgi_device,
        ID2D1Device4 **d2d_device) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Factory5, 0xc4349994, 0x838e, 0x4b0f, 0x8c,0xab, 0x44,0x99,0x7d,0x9e,0xea,0xcc)
#endif
#else
typedef struct ID2D1Factory5Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Factory5 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Factory5 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Factory5 *This);

    /*** ID2D1Factory methods ***/
    HRESULT (STDMETHODCALLTYPE *ReloadSystemMetrics)(
        ID2D1Factory5 *This);

    void (STDMETHODCALLTYPE *GetDesktopDpi)(
        ID2D1Factory5 *This,
        float *dpi_x,
        float *dpi_y);

    HRESULT (STDMETHODCALLTYPE *CreateRectangleGeometry)(
        ID2D1Factory5 *This,
        const D2D1_RECT_F *rect,
        ID2D1RectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateRoundedRectangleGeometry)(
        ID2D1Factory5 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1RoundedRectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateEllipseGeometry)(
        ID2D1Factory5 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1EllipseGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateGeometryGroup)(
        ID2D1Factory5 *This,
        D2D1_FILL_MODE fill_mode,
        ID2D1Geometry **geometries,
        UINT32 geometry_count,
        ID2D1GeometryGroup **group);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedGeometry)(
        ID2D1Factory5 *This,
        ID2D1Geometry *src_geometry,
        const D2D1_MATRIX_3X2_F *transform,
        ID2D1TransformedGeometry **transformed_geometry);

    HRESULT (STDMETHODCALLTYPE *CreatePathGeometry)(
        ID2D1Factory5 *This,
        ID2D1PathGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateStrokeStyle)(
        ID2D1Factory5 *This,
        const D2D1_STROKE_STYLE_PROPERTIES *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle **stroke_style);

    HRESULT (STDMETHODCALLTYPE *CreateDrawingStateBlock)(
        ID2D1Factory5 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateWicBitmapRenderTarget)(
        ID2D1Factory5 *This,
        IWICBitmap *target,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateHwndRenderTarget)(
        ID2D1Factory5 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,
        ID2D1HwndRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDxgiSurfaceRenderTarget)(
        ID2D1Factory5 *This,
        IDXGISurface *surface,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDCRenderTarget)(
        ID2D1Factory5 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1DCRenderTarget **render_target);

    /*** ID2D1Factory1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDevice)(
        ID2D1Factory5 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device **device);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateStrokeStyle)(
        ID2D1Factory5 *This,
        const D2D1_STROKE_STYLE_PROPERTIES1 *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle1 **stroke_style);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreatePathGeometry)(
        ID2D1Factory5 *This,
        ID2D1PathGeometry1 **geometry);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateDrawingStateBlock)(
        ID2D1Factory5 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock1 **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateGdiMetafile)(
        ID2D1Factory5 *This,
        IStream *stream,
        ID2D1GdiMetafile **metafile);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromStream)(
        ID2D1Factory5 *This,
        REFCLSID effect_id,
        IStream *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromString)(
        ID2D1Factory5 *This,
        REFCLSID effect_id,
        const WCHAR *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *UnregisterEffect)(
        ID2D1Factory5 *This,
        REFCLSID effect_id);

    HRESULT (STDMETHODCALLTYPE *GetRegisteredEffects)(
        ID2D1Factory5 *This,
        CLSID *effects,
        UINT32 effect_count,
        UINT32 *returned,
        UINT32 *registered);

    HRESULT (STDMETHODCALLTYPE *GetEffectProperties)(
        ID2D1Factory5 *This,
        REFCLSID effect_id,
        ID2D1Properties **props);

    /*** ID2D1Factory2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory2_CreateDevice)(
        ID2D1Factory5 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device1 **device);

    /*** ID2D1Factory3 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory3_CreateDevice)(
        ID2D1Factory5 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device2 **d2d_device);

    /*** ID2D1Factory4 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory4_CreateDevice)(
        ID2D1Factory5 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device3 **d2d_device);

    /*** ID2D1Factory5 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory5_CreateDevice)(
        ID2D1Factory5 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device4 **d2d_device);

    END_INTERFACE
} ID2D1Factory5Vtbl;

interface ID2D1Factory5 {
    CONST_VTBL ID2D1Factory5Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Factory5_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Factory5_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Factory5_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Factory methods ***/
#define ID2D1Factory5_ReloadSystemMetrics(This) (This)->lpVtbl->ReloadSystemMetrics(This)
#define ID2D1Factory5_GetDesktopDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y)
#define ID2D1Factory5_CreateRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRectangleGeometry(This,rect,geometry)
#define ID2D1Factory5_CreateRoundedRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry)
#define ID2D1Factory5_CreateEllipseGeometry(This,ellipse,geometry) (This)->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry)
#define ID2D1Factory5_CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group) (This)->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group)
#define ID2D1Factory5_CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry) (This)->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry)
#define ID2D1Factory5_CreateWicBitmapRenderTarget(This,target,desc,render_target) (This)->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target)
#define ID2D1Factory5_CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target) (This)->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target)
#define ID2D1Factory5_CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target) (This)->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target)
#define ID2D1Factory5_CreateDCRenderTarget(This,desc,render_target) (This)->lpVtbl->CreateDCRenderTarget(This,desc,render_target)
/*** ID2D1Factory1 methods ***/
#define ID2D1Factory5_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style) (This)->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style)
#define ID2D1Factory5_CreatePathGeometry(This,geometry) (This)->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry)
#define ID2D1Factory5_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block) (This)->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block)
#define ID2D1Factory5_CreateGdiMetafile(This,stream,metafile) (This)->lpVtbl->CreateGdiMetafile(This,stream,metafile)
#define ID2D1Factory5_RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory5_RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory5_UnregisterEffect(This,effect_id) (This)->lpVtbl->UnregisterEffect(This,effect_id)
#define ID2D1Factory5_GetRegisteredEffects(This,effects,effect_count,returned,registered) (This)->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered)
#define ID2D1Factory5_GetEffectProperties(This,effect_id,props) (This)->lpVtbl->GetEffectProperties(This,effect_id,props)
/*** ID2D1Factory2 methods ***/
/*** ID2D1Factory3 methods ***/
/*** ID2D1Factory4 methods ***/
/*** ID2D1Factory5 methods ***/
#define ID2D1Factory5_CreateDevice(This,dxgi_device,d2d_device) (This)->lpVtbl->ID2D1Factory5_CreateDevice(This,dxgi_device,d2d_device)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Factory5_QueryInterface(ID2D1Factory5* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Factory5_AddRef(ID2D1Factory5* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Factory5_Release(ID2D1Factory5* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Factory methods ***/
static inline HRESULT ID2D1Factory5_ReloadSystemMetrics(ID2D1Factory5* This) {
    return This->lpVtbl->ReloadSystemMetrics(This);
}
static inline void ID2D1Factory5_GetDesktopDpi(ID2D1Factory5* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y);
}
static inline HRESULT ID2D1Factory5_CreateRectangleGeometry(ID2D1Factory5* This,const D2D1_RECT_F *rect,ID2D1RectangleGeometry **geometry) {
    return This->lpVtbl->CreateRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory5_CreateRoundedRectangleGeometry(ID2D1Factory5* This,const D2D1_ROUNDED_RECT *rect,ID2D1RoundedRectangleGeometry **geometry) {
    return This->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory5_CreateEllipseGeometry(ID2D1Factory5* This,const D2D1_ELLIPSE *ellipse,ID2D1EllipseGeometry **geometry) {
    return This->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry);
}
static inline HRESULT ID2D1Factory5_CreateGeometryGroup(ID2D1Factory5* This,D2D1_FILL_MODE fill_mode,ID2D1Geometry **geometries,UINT32 geometry_count,ID2D1GeometryGroup **group) {
    return This->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group);
}
static inline HRESULT ID2D1Factory5_CreateTransformedGeometry(ID2D1Factory5* This,ID2D1Geometry *src_geometry,const D2D1_MATRIX_3X2_F *transform,ID2D1TransformedGeometry **transformed_geometry) {
    return This->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry);
}
static inline HRESULT ID2D1Factory5_CreateWicBitmapRenderTarget(ID2D1Factory5* This,IWICBitmap *target,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target);
}
static inline HRESULT ID2D1Factory5_CreateHwndRenderTarget(ID2D1Factory5* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,ID2D1HwndRenderTarget **render_target) {
    return This->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target);
}
static inline HRESULT ID2D1Factory5_CreateDxgiSurfaceRenderTarget(ID2D1Factory5* This,IDXGISurface *surface,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target);
}
static inline HRESULT ID2D1Factory5_CreateDCRenderTarget(ID2D1Factory5* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1DCRenderTarget **render_target) {
    return This->lpVtbl->CreateDCRenderTarget(This,desc,render_target);
}
/*** ID2D1Factory1 methods ***/
static inline HRESULT ID2D1Factory5_CreateStrokeStyle(ID2D1Factory5* This,const D2D1_STROKE_STYLE_PROPERTIES1 *desc,const float *dashes,UINT32 dash_count,ID2D1StrokeStyle1 **stroke_style) {
    return This->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style);
}
static inline HRESULT ID2D1Factory5_CreatePathGeometry(ID2D1Factory5* This,ID2D1PathGeometry1 **geometry) {
    return This->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry);
}
static inline HRESULT ID2D1Factory5_CreateDrawingStateBlock(ID2D1Factory5* This,const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,IDWriteRenderingParams *text_rendering_params,ID2D1DrawingStateBlock1 **state_block) {
    return This->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block);
}
static inline HRESULT ID2D1Factory5_CreateGdiMetafile(ID2D1Factory5* This,IStream *stream,ID2D1GdiMetafile **metafile) {
    return This->lpVtbl->CreateGdiMetafile(This,stream,metafile);
}
static inline HRESULT ID2D1Factory5_RegisterEffectFromStream(ID2D1Factory5* This,REFCLSID effect_id,IStream *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory5_RegisterEffectFromString(ID2D1Factory5* This,REFCLSID effect_id,const WCHAR *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory5_UnregisterEffect(ID2D1Factory5* This,REFCLSID effect_id) {
    return This->lpVtbl->UnregisterEffect(This,effect_id);
}
static inline HRESULT ID2D1Factory5_GetRegisteredEffects(ID2D1Factory5* This,CLSID *effects,UINT32 effect_count,UINT32 *returned,UINT32 *registered) {
    return This->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered);
}
static inline HRESULT ID2D1Factory5_GetEffectProperties(ID2D1Factory5* This,REFCLSID effect_id,ID2D1Properties **props) {
    return This->lpVtbl->GetEffectProperties(This,effect_id,props);
}
/*** ID2D1Factory2 methods ***/
/*** ID2D1Factory3 methods ***/
/*** ID2D1Factory4 methods ***/
/*** ID2D1Factory5 methods ***/
static inline HRESULT ID2D1Factory5_CreateDevice(ID2D1Factory5* This,IDXGIDevice *dxgi_device,ID2D1Device4 **d2d_device) {
    return This->lpVtbl->ID2D1Factory5_CreateDevice(This,dxgi_device,d2d_device);
}
#endif
#endif

#endif


#endif  /* __ID2D1Factory5_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Factory6 interface
 */
#ifndef __ID2D1Factory6_INTERFACE_DEFINED__
#define __ID2D1Factory6_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Factory6, 0xf9976f46, 0xf642, 0x44c1, 0x97,0xca, 0xda,0x32,0xea,0x2a,0x26,0x35);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f9976f46-f642-44c1-97ca-da32ea2a2635")
ID2D1Factory6 : public ID2D1Factory5
{
    virtual HRESULT STDMETHODCALLTYPE CreateDevice(
        IDXGIDevice *dxgi_device,
        ID2D1Device5 **d2d_device) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Factory6, 0xf9976f46, 0xf642, 0x44c1, 0x97,0xca, 0xda,0x32,0xea,0x2a,0x26,0x35)
#endif
#else
typedef struct ID2D1Factory6Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Factory6 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Factory6 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Factory6 *This);

    /*** ID2D1Factory methods ***/
    HRESULT (STDMETHODCALLTYPE *ReloadSystemMetrics)(
        ID2D1Factory6 *This);

    void (STDMETHODCALLTYPE *GetDesktopDpi)(
        ID2D1Factory6 *This,
        float *dpi_x,
        float *dpi_y);

    HRESULT (STDMETHODCALLTYPE *CreateRectangleGeometry)(
        ID2D1Factory6 *This,
        const D2D1_RECT_F *rect,
        ID2D1RectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateRoundedRectangleGeometry)(
        ID2D1Factory6 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1RoundedRectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateEllipseGeometry)(
        ID2D1Factory6 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1EllipseGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateGeometryGroup)(
        ID2D1Factory6 *This,
        D2D1_FILL_MODE fill_mode,
        ID2D1Geometry **geometries,
        UINT32 geometry_count,
        ID2D1GeometryGroup **group);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedGeometry)(
        ID2D1Factory6 *This,
        ID2D1Geometry *src_geometry,
        const D2D1_MATRIX_3X2_F *transform,
        ID2D1TransformedGeometry **transformed_geometry);

    HRESULT (STDMETHODCALLTYPE *CreatePathGeometry)(
        ID2D1Factory6 *This,
        ID2D1PathGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateStrokeStyle)(
        ID2D1Factory6 *This,
        const D2D1_STROKE_STYLE_PROPERTIES *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle **stroke_style);

    HRESULT (STDMETHODCALLTYPE *CreateDrawingStateBlock)(
        ID2D1Factory6 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateWicBitmapRenderTarget)(
        ID2D1Factory6 *This,
        IWICBitmap *target,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateHwndRenderTarget)(
        ID2D1Factory6 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,
        ID2D1HwndRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDxgiSurfaceRenderTarget)(
        ID2D1Factory6 *This,
        IDXGISurface *surface,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDCRenderTarget)(
        ID2D1Factory6 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1DCRenderTarget **render_target);

    /*** ID2D1Factory1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDevice)(
        ID2D1Factory6 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device **device);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateStrokeStyle)(
        ID2D1Factory6 *This,
        const D2D1_STROKE_STYLE_PROPERTIES1 *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle1 **stroke_style);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreatePathGeometry)(
        ID2D1Factory6 *This,
        ID2D1PathGeometry1 **geometry);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateDrawingStateBlock)(
        ID2D1Factory6 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock1 **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateGdiMetafile)(
        ID2D1Factory6 *This,
        IStream *stream,
        ID2D1GdiMetafile **metafile);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromStream)(
        ID2D1Factory6 *This,
        REFCLSID effect_id,
        IStream *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromString)(
        ID2D1Factory6 *This,
        REFCLSID effect_id,
        const WCHAR *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *UnregisterEffect)(
        ID2D1Factory6 *This,
        REFCLSID effect_id);

    HRESULT (STDMETHODCALLTYPE *GetRegisteredEffects)(
        ID2D1Factory6 *This,
        CLSID *effects,
        UINT32 effect_count,
        UINT32 *returned,
        UINT32 *registered);

    HRESULT (STDMETHODCALLTYPE *GetEffectProperties)(
        ID2D1Factory6 *This,
        REFCLSID effect_id,
        ID2D1Properties **props);

    /*** ID2D1Factory2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory2_CreateDevice)(
        ID2D1Factory6 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device1 **device);

    /*** ID2D1Factory3 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory3_CreateDevice)(
        ID2D1Factory6 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device2 **d2d_device);

    /*** ID2D1Factory4 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory4_CreateDevice)(
        ID2D1Factory6 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device3 **d2d_device);

    /*** ID2D1Factory5 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory5_CreateDevice)(
        ID2D1Factory6 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device4 **d2d_device);

    /*** ID2D1Factory6 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory6_CreateDevice)(
        ID2D1Factory6 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device5 **d2d_device);

    END_INTERFACE
} ID2D1Factory6Vtbl;

interface ID2D1Factory6 {
    CONST_VTBL ID2D1Factory6Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Factory6_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Factory6_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Factory6_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Factory methods ***/
#define ID2D1Factory6_ReloadSystemMetrics(This) (This)->lpVtbl->ReloadSystemMetrics(This)
#define ID2D1Factory6_GetDesktopDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y)
#define ID2D1Factory6_CreateRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRectangleGeometry(This,rect,geometry)
#define ID2D1Factory6_CreateRoundedRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry)
#define ID2D1Factory6_CreateEllipseGeometry(This,ellipse,geometry) (This)->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry)
#define ID2D1Factory6_CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group) (This)->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group)
#define ID2D1Factory6_CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry) (This)->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry)
#define ID2D1Factory6_CreateWicBitmapRenderTarget(This,target,desc,render_target) (This)->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target)
#define ID2D1Factory6_CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target) (This)->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target)
#define ID2D1Factory6_CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target) (This)->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target)
#define ID2D1Factory6_CreateDCRenderTarget(This,desc,render_target) (This)->lpVtbl->CreateDCRenderTarget(This,desc,render_target)
/*** ID2D1Factory1 methods ***/
#define ID2D1Factory6_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style) (This)->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style)
#define ID2D1Factory6_CreatePathGeometry(This,geometry) (This)->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry)
#define ID2D1Factory6_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block) (This)->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block)
#define ID2D1Factory6_CreateGdiMetafile(This,stream,metafile) (This)->lpVtbl->CreateGdiMetafile(This,stream,metafile)
#define ID2D1Factory6_RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory6_RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory6_UnregisterEffect(This,effect_id) (This)->lpVtbl->UnregisterEffect(This,effect_id)
#define ID2D1Factory6_GetRegisteredEffects(This,effects,effect_count,returned,registered) (This)->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered)
#define ID2D1Factory6_GetEffectProperties(This,effect_id,props) (This)->lpVtbl->GetEffectProperties(This,effect_id,props)
/*** ID2D1Factory2 methods ***/
/*** ID2D1Factory3 methods ***/
/*** ID2D1Factory4 methods ***/
/*** ID2D1Factory5 methods ***/
/*** ID2D1Factory6 methods ***/
#define ID2D1Factory6_CreateDevice(This,dxgi_device,d2d_device) (This)->lpVtbl->ID2D1Factory6_CreateDevice(This,dxgi_device,d2d_device)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Factory6_QueryInterface(ID2D1Factory6* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Factory6_AddRef(ID2D1Factory6* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Factory6_Release(ID2D1Factory6* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Factory methods ***/
static inline HRESULT ID2D1Factory6_ReloadSystemMetrics(ID2D1Factory6* This) {
    return This->lpVtbl->ReloadSystemMetrics(This);
}
static inline void ID2D1Factory6_GetDesktopDpi(ID2D1Factory6* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y);
}
static inline HRESULT ID2D1Factory6_CreateRectangleGeometry(ID2D1Factory6* This,const D2D1_RECT_F *rect,ID2D1RectangleGeometry **geometry) {
    return This->lpVtbl->CreateRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory6_CreateRoundedRectangleGeometry(ID2D1Factory6* This,const D2D1_ROUNDED_RECT *rect,ID2D1RoundedRectangleGeometry **geometry) {
    return This->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory6_CreateEllipseGeometry(ID2D1Factory6* This,const D2D1_ELLIPSE *ellipse,ID2D1EllipseGeometry **geometry) {
    return This->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry);
}
static inline HRESULT ID2D1Factory6_CreateGeometryGroup(ID2D1Factory6* This,D2D1_FILL_MODE fill_mode,ID2D1Geometry **geometries,UINT32 geometry_count,ID2D1GeometryGroup **group) {
    return This->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group);
}
static inline HRESULT ID2D1Factory6_CreateTransformedGeometry(ID2D1Factory6* This,ID2D1Geometry *src_geometry,const D2D1_MATRIX_3X2_F *transform,ID2D1TransformedGeometry **transformed_geometry) {
    return This->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry);
}
static inline HRESULT ID2D1Factory6_CreateWicBitmapRenderTarget(ID2D1Factory6* This,IWICBitmap *target,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target);
}
static inline HRESULT ID2D1Factory6_CreateHwndRenderTarget(ID2D1Factory6* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,ID2D1HwndRenderTarget **render_target) {
    return This->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target);
}
static inline HRESULT ID2D1Factory6_CreateDxgiSurfaceRenderTarget(ID2D1Factory6* This,IDXGISurface *surface,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target);
}
static inline HRESULT ID2D1Factory6_CreateDCRenderTarget(ID2D1Factory6* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1DCRenderTarget **render_target) {
    return This->lpVtbl->CreateDCRenderTarget(This,desc,render_target);
}
/*** ID2D1Factory1 methods ***/
static inline HRESULT ID2D1Factory6_CreateStrokeStyle(ID2D1Factory6* This,const D2D1_STROKE_STYLE_PROPERTIES1 *desc,const float *dashes,UINT32 dash_count,ID2D1StrokeStyle1 **stroke_style) {
    return This->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style);
}
static inline HRESULT ID2D1Factory6_CreatePathGeometry(ID2D1Factory6* This,ID2D1PathGeometry1 **geometry) {
    return This->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry);
}
static inline HRESULT ID2D1Factory6_CreateDrawingStateBlock(ID2D1Factory6* This,const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,IDWriteRenderingParams *text_rendering_params,ID2D1DrawingStateBlock1 **state_block) {
    return This->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block);
}
static inline HRESULT ID2D1Factory6_CreateGdiMetafile(ID2D1Factory6* This,IStream *stream,ID2D1GdiMetafile **metafile) {
    return This->lpVtbl->CreateGdiMetafile(This,stream,metafile);
}
static inline HRESULT ID2D1Factory6_RegisterEffectFromStream(ID2D1Factory6* This,REFCLSID effect_id,IStream *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory6_RegisterEffectFromString(ID2D1Factory6* This,REFCLSID effect_id,const WCHAR *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory6_UnregisterEffect(ID2D1Factory6* This,REFCLSID effect_id) {
    return This->lpVtbl->UnregisterEffect(This,effect_id);
}
static inline HRESULT ID2D1Factory6_GetRegisteredEffects(ID2D1Factory6* This,CLSID *effects,UINT32 effect_count,UINT32 *returned,UINT32 *registered) {
    return This->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered);
}
static inline HRESULT ID2D1Factory6_GetEffectProperties(ID2D1Factory6* This,REFCLSID effect_id,ID2D1Properties **props) {
    return This->lpVtbl->GetEffectProperties(This,effect_id,props);
}
/*** ID2D1Factory2 methods ***/
/*** ID2D1Factory3 methods ***/
/*** ID2D1Factory4 methods ***/
/*** ID2D1Factory5 methods ***/
/*** ID2D1Factory6 methods ***/
static inline HRESULT ID2D1Factory6_CreateDevice(ID2D1Factory6* This,IDXGIDevice *dxgi_device,ID2D1Device5 **d2d_device) {
    return This->lpVtbl->ID2D1Factory6_CreateDevice(This,dxgi_device,d2d_device);
}
#endif
#endif

#endif


#endif  /* __ID2D1Factory6_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Factory7 interface
 */
#ifndef __ID2D1Factory7_INTERFACE_DEFINED__
#define __ID2D1Factory7_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Factory7, 0xbdc2bdd3, 0xb96c, 0x4de6, 0xbd,0xf7, 0x99,0xd4,0x74,0x54,0x54,0xde);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bdc2bdd3-b96c-4de6-bdf7-99d4745454de")
ID2D1Factory7 : public ID2D1Factory6
{
    virtual HRESULT STDMETHODCALLTYPE CreateDevice(
        IDXGIDevice *dxgi_device,
        ID2D1Device6 **d2d_device) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Factory7, 0xbdc2bdd3, 0xb96c, 0x4de6, 0xbd,0xf7, 0x99,0xd4,0x74,0x54,0x54,0xde)
#endif
#else
typedef struct ID2D1Factory7Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Factory7 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Factory7 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Factory7 *This);

    /*** ID2D1Factory methods ***/
    HRESULT (STDMETHODCALLTYPE *ReloadSystemMetrics)(
        ID2D1Factory7 *This);

    void (STDMETHODCALLTYPE *GetDesktopDpi)(
        ID2D1Factory7 *This,
        float *dpi_x,
        float *dpi_y);

    HRESULT (STDMETHODCALLTYPE *CreateRectangleGeometry)(
        ID2D1Factory7 *This,
        const D2D1_RECT_F *rect,
        ID2D1RectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateRoundedRectangleGeometry)(
        ID2D1Factory7 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1RoundedRectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateEllipseGeometry)(
        ID2D1Factory7 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1EllipseGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateGeometryGroup)(
        ID2D1Factory7 *This,
        D2D1_FILL_MODE fill_mode,
        ID2D1Geometry **geometries,
        UINT32 geometry_count,
        ID2D1GeometryGroup **group);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedGeometry)(
        ID2D1Factory7 *This,
        ID2D1Geometry *src_geometry,
        const D2D1_MATRIX_3X2_F *transform,
        ID2D1TransformedGeometry **transformed_geometry);

    HRESULT (STDMETHODCALLTYPE *CreatePathGeometry)(
        ID2D1Factory7 *This,
        ID2D1PathGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateStrokeStyle)(
        ID2D1Factory7 *This,
        const D2D1_STROKE_STYLE_PROPERTIES *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle **stroke_style);

    HRESULT (STDMETHODCALLTYPE *CreateDrawingStateBlock)(
        ID2D1Factory7 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateWicBitmapRenderTarget)(
        ID2D1Factory7 *This,
        IWICBitmap *target,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateHwndRenderTarget)(
        ID2D1Factory7 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,
        ID2D1HwndRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDxgiSurfaceRenderTarget)(
        ID2D1Factory7 *This,
        IDXGISurface *surface,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDCRenderTarget)(
        ID2D1Factory7 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1DCRenderTarget **render_target);

    /*** ID2D1Factory1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDevice)(
        ID2D1Factory7 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device **device);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateStrokeStyle)(
        ID2D1Factory7 *This,
        const D2D1_STROKE_STYLE_PROPERTIES1 *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle1 **stroke_style);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreatePathGeometry)(
        ID2D1Factory7 *This,
        ID2D1PathGeometry1 **geometry);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateDrawingStateBlock)(
        ID2D1Factory7 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock1 **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateGdiMetafile)(
        ID2D1Factory7 *This,
        IStream *stream,
        ID2D1GdiMetafile **metafile);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromStream)(
        ID2D1Factory7 *This,
        REFCLSID effect_id,
        IStream *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromString)(
        ID2D1Factory7 *This,
        REFCLSID effect_id,
        const WCHAR *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *UnregisterEffect)(
        ID2D1Factory7 *This,
        REFCLSID effect_id);

    HRESULT (STDMETHODCALLTYPE *GetRegisteredEffects)(
        ID2D1Factory7 *This,
        CLSID *effects,
        UINT32 effect_count,
        UINT32 *returned,
        UINT32 *registered);

    HRESULT (STDMETHODCALLTYPE *GetEffectProperties)(
        ID2D1Factory7 *This,
        REFCLSID effect_id,
        ID2D1Properties **props);

    /*** ID2D1Factory2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory2_CreateDevice)(
        ID2D1Factory7 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device1 **device);

    /*** ID2D1Factory3 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory3_CreateDevice)(
        ID2D1Factory7 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device2 **d2d_device);

    /*** ID2D1Factory4 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory4_CreateDevice)(
        ID2D1Factory7 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device3 **d2d_device);

    /*** ID2D1Factory5 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory5_CreateDevice)(
        ID2D1Factory7 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device4 **d2d_device);

    /*** ID2D1Factory6 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory6_CreateDevice)(
        ID2D1Factory7 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device5 **d2d_device);

    /*** ID2D1Factory7 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory7_CreateDevice)(
        ID2D1Factory7 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device6 **d2d_device);

    END_INTERFACE
} ID2D1Factory7Vtbl;

interface ID2D1Factory7 {
    CONST_VTBL ID2D1Factory7Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Factory7_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Factory7_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Factory7_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Factory methods ***/
#define ID2D1Factory7_ReloadSystemMetrics(This) (This)->lpVtbl->ReloadSystemMetrics(This)
#define ID2D1Factory7_GetDesktopDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y)
#define ID2D1Factory7_CreateRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRectangleGeometry(This,rect,geometry)
#define ID2D1Factory7_CreateRoundedRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry)
#define ID2D1Factory7_CreateEllipseGeometry(This,ellipse,geometry) (This)->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry)
#define ID2D1Factory7_CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group) (This)->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group)
#define ID2D1Factory7_CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry) (This)->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry)
#define ID2D1Factory7_CreateWicBitmapRenderTarget(This,target,desc,render_target) (This)->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target)
#define ID2D1Factory7_CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target) (This)->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target)
#define ID2D1Factory7_CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target) (This)->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target)
#define ID2D1Factory7_CreateDCRenderTarget(This,desc,render_target) (This)->lpVtbl->CreateDCRenderTarget(This,desc,render_target)
/*** ID2D1Factory1 methods ***/
#define ID2D1Factory7_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style) (This)->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style)
#define ID2D1Factory7_CreatePathGeometry(This,geometry) (This)->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry)
#define ID2D1Factory7_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block) (This)->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block)
#define ID2D1Factory7_CreateGdiMetafile(This,stream,metafile) (This)->lpVtbl->CreateGdiMetafile(This,stream,metafile)
#define ID2D1Factory7_RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory7_RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory7_UnregisterEffect(This,effect_id) (This)->lpVtbl->UnregisterEffect(This,effect_id)
#define ID2D1Factory7_GetRegisteredEffects(This,effects,effect_count,returned,registered) (This)->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered)
#define ID2D1Factory7_GetEffectProperties(This,effect_id,props) (This)->lpVtbl->GetEffectProperties(This,effect_id,props)
/*** ID2D1Factory2 methods ***/
/*** ID2D1Factory3 methods ***/
/*** ID2D1Factory4 methods ***/
/*** ID2D1Factory5 methods ***/
/*** ID2D1Factory6 methods ***/
/*** ID2D1Factory7 methods ***/
#define ID2D1Factory7_CreateDevice(This,dxgi_device,d2d_device) (This)->lpVtbl->ID2D1Factory7_CreateDevice(This,dxgi_device,d2d_device)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Factory7_QueryInterface(ID2D1Factory7* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Factory7_AddRef(ID2D1Factory7* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Factory7_Release(ID2D1Factory7* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Factory methods ***/
static inline HRESULT ID2D1Factory7_ReloadSystemMetrics(ID2D1Factory7* This) {
    return This->lpVtbl->ReloadSystemMetrics(This);
}
static inline void ID2D1Factory7_GetDesktopDpi(ID2D1Factory7* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y);
}
static inline HRESULT ID2D1Factory7_CreateRectangleGeometry(ID2D1Factory7* This,const D2D1_RECT_F *rect,ID2D1RectangleGeometry **geometry) {
    return This->lpVtbl->CreateRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory7_CreateRoundedRectangleGeometry(ID2D1Factory7* This,const D2D1_ROUNDED_RECT *rect,ID2D1RoundedRectangleGeometry **geometry) {
    return This->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory7_CreateEllipseGeometry(ID2D1Factory7* This,const D2D1_ELLIPSE *ellipse,ID2D1EllipseGeometry **geometry) {
    return This->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry);
}
static inline HRESULT ID2D1Factory7_CreateGeometryGroup(ID2D1Factory7* This,D2D1_FILL_MODE fill_mode,ID2D1Geometry **geometries,UINT32 geometry_count,ID2D1GeometryGroup **group) {
    return This->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group);
}
static inline HRESULT ID2D1Factory7_CreateTransformedGeometry(ID2D1Factory7* This,ID2D1Geometry *src_geometry,const D2D1_MATRIX_3X2_F *transform,ID2D1TransformedGeometry **transformed_geometry) {
    return This->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry);
}
static inline HRESULT ID2D1Factory7_CreateWicBitmapRenderTarget(ID2D1Factory7* This,IWICBitmap *target,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target);
}
static inline HRESULT ID2D1Factory7_CreateHwndRenderTarget(ID2D1Factory7* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,ID2D1HwndRenderTarget **render_target) {
    return This->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target);
}
static inline HRESULT ID2D1Factory7_CreateDxgiSurfaceRenderTarget(ID2D1Factory7* This,IDXGISurface *surface,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target);
}
static inline HRESULT ID2D1Factory7_CreateDCRenderTarget(ID2D1Factory7* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1DCRenderTarget **render_target) {
    return This->lpVtbl->CreateDCRenderTarget(This,desc,render_target);
}
/*** ID2D1Factory1 methods ***/
static inline HRESULT ID2D1Factory7_CreateStrokeStyle(ID2D1Factory7* This,const D2D1_STROKE_STYLE_PROPERTIES1 *desc,const float *dashes,UINT32 dash_count,ID2D1StrokeStyle1 **stroke_style) {
    return This->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style);
}
static inline HRESULT ID2D1Factory7_CreatePathGeometry(ID2D1Factory7* This,ID2D1PathGeometry1 **geometry) {
    return This->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry);
}
static inline HRESULT ID2D1Factory7_CreateDrawingStateBlock(ID2D1Factory7* This,const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,IDWriteRenderingParams *text_rendering_params,ID2D1DrawingStateBlock1 **state_block) {
    return This->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block);
}
static inline HRESULT ID2D1Factory7_CreateGdiMetafile(ID2D1Factory7* This,IStream *stream,ID2D1GdiMetafile **metafile) {
    return This->lpVtbl->CreateGdiMetafile(This,stream,metafile);
}
static inline HRESULT ID2D1Factory7_RegisterEffectFromStream(ID2D1Factory7* This,REFCLSID effect_id,IStream *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory7_RegisterEffectFromString(ID2D1Factory7* This,REFCLSID effect_id,const WCHAR *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory7_UnregisterEffect(ID2D1Factory7* This,REFCLSID effect_id) {
    return This->lpVtbl->UnregisterEffect(This,effect_id);
}
static inline HRESULT ID2D1Factory7_GetRegisteredEffects(ID2D1Factory7* This,CLSID *effects,UINT32 effect_count,UINT32 *returned,UINT32 *registered) {
    return This->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered);
}
static inline HRESULT ID2D1Factory7_GetEffectProperties(ID2D1Factory7* This,REFCLSID effect_id,ID2D1Properties **props) {
    return This->lpVtbl->GetEffectProperties(This,effect_id,props);
}
/*** ID2D1Factory2 methods ***/
/*** ID2D1Factory3 methods ***/
/*** ID2D1Factory4 methods ***/
/*** ID2D1Factory5 methods ***/
/*** ID2D1Factory6 methods ***/
/*** ID2D1Factory7 methods ***/
static inline HRESULT ID2D1Factory7_CreateDevice(ID2D1Factory7* This,IDXGIDevice *dxgi_device,ID2D1Device6 **d2d_device) {
    return This->lpVtbl->ID2D1Factory7_CreateDevice(This,dxgi_device,d2d_device);
}
#endif
#endif

#endif


#endif  /* __ID2D1Factory7_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Factory8 interface
 */
#ifndef __ID2D1Factory8_INTERFACE_DEFINED__
#define __ID2D1Factory8_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Factory8, 0x677c9311, 0xf36d, 0x4b1f, 0xae,0x86, 0x86,0xd1,0x22,0x3f,0xfd,0x3a);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("677c9311-f36d-4b1f-ae86-86d1223ffd3a")
ID2D1Factory8 : public ID2D1Factory7
{
    virtual HRESULT STDMETHODCALLTYPE CreateDevice(
        IDXGIDevice *dxgi_device,
        ID2D1Device7 **d2d_device) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Factory8, 0x677c9311, 0xf36d, 0x4b1f, 0xae,0x86, 0x86,0xd1,0x22,0x3f,0xfd,0x3a)
#endif
#else
typedef struct ID2D1Factory8Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Factory8 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Factory8 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Factory8 *This);

    /*** ID2D1Factory methods ***/
    HRESULT (STDMETHODCALLTYPE *ReloadSystemMetrics)(
        ID2D1Factory8 *This);

    void (STDMETHODCALLTYPE *GetDesktopDpi)(
        ID2D1Factory8 *This,
        float *dpi_x,
        float *dpi_y);

    HRESULT (STDMETHODCALLTYPE *CreateRectangleGeometry)(
        ID2D1Factory8 *This,
        const D2D1_RECT_F *rect,
        ID2D1RectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateRoundedRectangleGeometry)(
        ID2D1Factory8 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1RoundedRectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateEllipseGeometry)(
        ID2D1Factory8 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1EllipseGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateGeometryGroup)(
        ID2D1Factory8 *This,
        D2D1_FILL_MODE fill_mode,
        ID2D1Geometry **geometries,
        UINT32 geometry_count,
        ID2D1GeometryGroup **group);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedGeometry)(
        ID2D1Factory8 *This,
        ID2D1Geometry *src_geometry,
        const D2D1_MATRIX_3X2_F *transform,
        ID2D1TransformedGeometry **transformed_geometry);

    HRESULT (STDMETHODCALLTYPE *CreatePathGeometry)(
        ID2D1Factory8 *This,
        ID2D1PathGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateStrokeStyle)(
        ID2D1Factory8 *This,
        const D2D1_STROKE_STYLE_PROPERTIES *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle **stroke_style);

    HRESULT (STDMETHODCALLTYPE *CreateDrawingStateBlock)(
        ID2D1Factory8 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateWicBitmapRenderTarget)(
        ID2D1Factory8 *This,
        IWICBitmap *target,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateHwndRenderTarget)(
        ID2D1Factory8 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,
        ID2D1HwndRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDxgiSurfaceRenderTarget)(
        ID2D1Factory8 *This,
        IDXGISurface *surface,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDCRenderTarget)(
        ID2D1Factory8 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1DCRenderTarget **render_target);

    /*** ID2D1Factory1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDevice)(
        ID2D1Factory8 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device **device);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateStrokeStyle)(
        ID2D1Factory8 *This,
        const D2D1_STROKE_STYLE_PROPERTIES1 *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle1 **stroke_style);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreatePathGeometry)(
        ID2D1Factory8 *This,
        ID2D1PathGeometry1 **geometry);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateDrawingStateBlock)(
        ID2D1Factory8 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock1 **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateGdiMetafile)(
        ID2D1Factory8 *This,
        IStream *stream,
        ID2D1GdiMetafile **metafile);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromStream)(
        ID2D1Factory8 *This,
        REFCLSID effect_id,
        IStream *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromString)(
        ID2D1Factory8 *This,
        REFCLSID effect_id,
        const WCHAR *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *UnregisterEffect)(
        ID2D1Factory8 *This,
        REFCLSID effect_id);

    HRESULT (STDMETHODCALLTYPE *GetRegisteredEffects)(
        ID2D1Factory8 *This,
        CLSID *effects,
        UINT32 effect_count,
        UINT32 *returned,
        UINT32 *registered);

    HRESULT (STDMETHODCALLTYPE *GetEffectProperties)(
        ID2D1Factory8 *This,
        REFCLSID effect_id,
        ID2D1Properties **props);

    /*** ID2D1Factory2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory2_CreateDevice)(
        ID2D1Factory8 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device1 **device);

    /*** ID2D1Factory3 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory3_CreateDevice)(
        ID2D1Factory8 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device2 **d2d_device);

    /*** ID2D1Factory4 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory4_CreateDevice)(
        ID2D1Factory8 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device3 **d2d_device);

    /*** ID2D1Factory5 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory5_CreateDevice)(
        ID2D1Factory8 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device4 **d2d_device);

    /*** ID2D1Factory6 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory6_CreateDevice)(
        ID2D1Factory8 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device5 **d2d_device);

    /*** ID2D1Factory7 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory7_CreateDevice)(
        ID2D1Factory8 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device6 **d2d_device);

    /*** ID2D1Factory8 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory8_CreateDevice)(
        ID2D1Factory8 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device7 **d2d_device);

    END_INTERFACE
} ID2D1Factory8Vtbl;

interface ID2D1Factory8 {
    CONST_VTBL ID2D1Factory8Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Factory8_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Factory8_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Factory8_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Factory methods ***/
#define ID2D1Factory8_ReloadSystemMetrics(This) (This)->lpVtbl->ReloadSystemMetrics(This)
#define ID2D1Factory8_GetDesktopDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y)
#define ID2D1Factory8_CreateRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRectangleGeometry(This,rect,geometry)
#define ID2D1Factory8_CreateRoundedRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry)
#define ID2D1Factory8_CreateEllipseGeometry(This,ellipse,geometry) (This)->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry)
#define ID2D1Factory8_CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group) (This)->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group)
#define ID2D1Factory8_CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry) (This)->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry)
#define ID2D1Factory8_CreateWicBitmapRenderTarget(This,target,desc,render_target) (This)->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target)
#define ID2D1Factory8_CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target) (This)->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target)
#define ID2D1Factory8_CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target) (This)->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target)
#define ID2D1Factory8_CreateDCRenderTarget(This,desc,render_target) (This)->lpVtbl->CreateDCRenderTarget(This,desc,render_target)
/*** ID2D1Factory1 methods ***/
#define ID2D1Factory8_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style) (This)->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style)
#define ID2D1Factory8_CreatePathGeometry(This,geometry) (This)->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry)
#define ID2D1Factory8_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block) (This)->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block)
#define ID2D1Factory8_CreateGdiMetafile(This,stream,metafile) (This)->lpVtbl->CreateGdiMetafile(This,stream,metafile)
#define ID2D1Factory8_RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory8_RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory8_UnregisterEffect(This,effect_id) (This)->lpVtbl->UnregisterEffect(This,effect_id)
#define ID2D1Factory8_GetRegisteredEffects(This,effects,effect_count,returned,registered) (This)->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered)
#define ID2D1Factory8_GetEffectProperties(This,effect_id,props) (This)->lpVtbl->GetEffectProperties(This,effect_id,props)
/*** ID2D1Factory2 methods ***/
/*** ID2D1Factory3 methods ***/
/*** ID2D1Factory4 methods ***/
/*** ID2D1Factory5 methods ***/
/*** ID2D1Factory6 methods ***/
/*** ID2D1Factory7 methods ***/
/*** ID2D1Factory8 methods ***/
#define ID2D1Factory8_CreateDevice(This,dxgi_device,d2d_device) (This)->lpVtbl->ID2D1Factory8_CreateDevice(This,dxgi_device,d2d_device)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Factory8_QueryInterface(ID2D1Factory8* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Factory8_AddRef(ID2D1Factory8* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Factory8_Release(ID2D1Factory8* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Factory methods ***/
static inline HRESULT ID2D1Factory8_ReloadSystemMetrics(ID2D1Factory8* This) {
    return This->lpVtbl->ReloadSystemMetrics(This);
}
static inline void ID2D1Factory8_GetDesktopDpi(ID2D1Factory8* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y);
}
static inline HRESULT ID2D1Factory8_CreateRectangleGeometry(ID2D1Factory8* This,const D2D1_RECT_F *rect,ID2D1RectangleGeometry **geometry) {
    return This->lpVtbl->CreateRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory8_CreateRoundedRectangleGeometry(ID2D1Factory8* This,const D2D1_ROUNDED_RECT *rect,ID2D1RoundedRectangleGeometry **geometry) {
    return This->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory8_CreateEllipseGeometry(ID2D1Factory8* This,const D2D1_ELLIPSE *ellipse,ID2D1EllipseGeometry **geometry) {
    return This->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry);
}
static inline HRESULT ID2D1Factory8_CreateGeometryGroup(ID2D1Factory8* This,D2D1_FILL_MODE fill_mode,ID2D1Geometry **geometries,UINT32 geometry_count,ID2D1GeometryGroup **group) {
    return This->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group);
}
static inline HRESULT ID2D1Factory8_CreateTransformedGeometry(ID2D1Factory8* This,ID2D1Geometry *src_geometry,const D2D1_MATRIX_3X2_F *transform,ID2D1TransformedGeometry **transformed_geometry) {
    return This->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry);
}
static inline HRESULT ID2D1Factory8_CreateWicBitmapRenderTarget(ID2D1Factory8* This,IWICBitmap *target,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target);
}
static inline HRESULT ID2D1Factory8_CreateHwndRenderTarget(ID2D1Factory8* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,ID2D1HwndRenderTarget **render_target) {
    return This->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target);
}
static inline HRESULT ID2D1Factory8_CreateDxgiSurfaceRenderTarget(ID2D1Factory8* This,IDXGISurface *surface,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target);
}
static inline HRESULT ID2D1Factory8_CreateDCRenderTarget(ID2D1Factory8* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1DCRenderTarget **render_target) {
    return This->lpVtbl->CreateDCRenderTarget(This,desc,render_target);
}
/*** ID2D1Factory1 methods ***/
static inline HRESULT ID2D1Factory8_CreateStrokeStyle(ID2D1Factory8* This,const D2D1_STROKE_STYLE_PROPERTIES1 *desc,const float *dashes,UINT32 dash_count,ID2D1StrokeStyle1 **stroke_style) {
    return This->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style);
}
static inline HRESULT ID2D1Factory8_CreatePathGeometry(ID2D1Factory8* This,ID2D1PathGeometry1 **geometry) {
    return This->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry);
}
static inline HRESULT ID2D1Factory8_CreateDrawingStateBlock(ID2D1Factory8* This,const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,IDWriteRenderingParams *text_rendering_params,ID2D1DrawingStateBlock1 **state_block) {
    return This->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block);
}
static inline HRESULT ID2D1Factory8_CreateGdiMetafile(ID2D1Factory8* This,IStream *stream,ID2D1GdiMetafile **metafile) {
    return This->lpVtbl->CreateGdiMetafile(This,stream,metafile);
}
static inline HRESULT ID2D1Factory8_RegisterEffectFromStream(ID2D1Factory8* This,REFCLSID effect_id,IStream *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory8_RegisterEffectFromString(ID2D1Factory8* This,REFCLSID effect_id,const WCHAR *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory8_UnregisterEffect(ID2D1Factory8* This,REFCLSID effect_id) {
    return This->lpVtbl->UnregisterEffect(This,effect_id);
}
static inline HRESULT ID2D1Factory8_GetRegisteredEffects(ID2D1Factory8* This,CLSID *effects,UINT32 effect_count,UINT32 *returned,UINT32 *registered) {
    return This->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered);
}
static inline HRESULT ID2D1Factory8_GetEffectProperties(ID2D1Factory8* This,REFCLSID effect_id,ID2D1Properties **props) {
    return This->lpVtbl->GetEffectProperties(This,effect_id,props);
}
/*** ID2D1Factory2 methods ***/
/*** ID2D1Factory3 methods ***/
/*** ID2D1Factory4 methods ***/
/*** ID2D1Factory5 methods ***/
/*** ID2D1Factory6 methods ***/
/*** ID2D1Factory7 methods ***/
/*** ID2D1Factory8 methods ***/
static inline HRESULT ID2D1Factory8_CreateDevice(ID2D1Factory8* This,IDXGIDevice *dxgi_device,ID2D1Device7 **d2d_device) {
    return This->lpVtbl->ID2D1Factory8_CreateDevice(This,dxgi_device,d2d_device);
}
#endif
#endif

#endif


#endif  /* __ID2D1Factory8_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1CommandSink2 interface
 */
#ifndef __ID2D1CommandSink2_INTERFACE_DEFINED__
#define __ID2D1CommandSink2_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1CommandSink2, 0x3bab440e, 0x417e, 0x47df, 0xa2,0xe2, 0xbc,0x0b,0xe6,0xa0,0x09,0x16);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3bab440e-417e-47df-a2e2-bc0be6a00916")
ID2D1CommandSink2 : public ID2D1CommandSink1
{
    virtual HRESULT STDMETHODCALLTYPE DrawInk(
        ID2D1Ink *ink,
        ID2D1Brush *brush,
        ID2D1InkStyle *ink_style) = 0;

    virtual HRESULT STDMETHODCALLTYPE DrawGradientMesh(
        ID2D1GradientMesh *gradient_mesh) = 0;

    virtual HRESULT STDMETHODCALLTYPE DrawGdiMetafile(
        ID2D1GdiMetafile *gdi_metafile,
        const D2D1_RECT_F *dest_rect,
        const D2D1_RECT_F *src_rect) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1CommandSink2, 0x3bab440e, 0x417e, 0x47df, 0xa2,0xe2, 0xbc,0x0b,0xe6,0xa0,0x09,0x16)
#endif
#else
typedef struct ID2D1CommandSink2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1CommandSink2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1CommandSink2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1CommandSink2 *This);

    /*** ID2D1CommandSink methods ***/
    HRESULT (STDMETHODCALLTYPE *BeginDraw)(
        ID2D1CommandSink2 *This);

    HRESULT (STDMETHODCALLTYPE *EndDraw)(
        ID2D1CommandSink2 *This);

    HRESULT (STDMETHODCALLTYPE *SetAntialiasMode)(
        ID2D1CommandSink2 *This,
        D2D1_ANTIALIAS_MODE antialias_mode);

    HRESULT (STDMETHODCALLTYPE *SetTags)(
        ID2D1CommandSink2 *This,
        D2D1_TAG tag1,
        D2D1_TAG tag2);

    HRESULT (STDMETHODCALLTYPE *SetTextAntialiasMode)(
        ID2D1CommandSink2 *This,
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode);

    HRESULT (STDMETHODCALLTYPE *SetTextRenderingParams)(
        ID2D1CommandSink2 *This,
        IDWriteRenderingParams *text_rendering_params);

    HRESULT (STDMETHODCALLTYPE *SetTransform)(
        ID2D1CommandSink2 *This,
        const D2D1_MATRIX_3X2_F *transform);

    HRESULT (STDMETHODCALLTYPE *SetPrimitiveBlend)(
        ID2D1CommandSink2 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    HRESULT (STDMETHODCALLTYPE *SetUnitMode)(
        ID2D1CommandSink2 *This,
        D2D1_UNIT_MODE unit_mode);

    HRESULT (STDMETHODCALLTYPE *Clear)(
        ID2D1CommandSink2 *This,
        const D2D1_COLOR_F *color);

    HRESULT (STDMETHODCALLTYPE *DrawGlyphRun)(
        ID2D1CommandSink2 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    HRESULT (STDMETHODCALLTYPE *DrawLine)(
        ID2D1CommandSink2 *This,
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    HRESULT (STDMETHODCALLTYPE *DrawGeometry)(
        ID2D1CommandSink2 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    HRESULT (STDMETHODCALLTYPE *DrawRectangle)(
        ID2D1CommandSink2 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    HRESULT (STDMETHODCALLTYPE *DrawBitmap)(
        ID2D1CommandSink2 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform);

    HRESULT (STDMETHODCALLTYPE *DrawImage)(
        ID2D1CommandSink2 *This,
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode);

    HRESULT (STDMETHODCALLTYPE *DrawGdiMetafile)(
        ID2D1CommandSink2 *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

    HRESULT (STDMETHODCALLTYPE *FillMesh)(
        ID2D1CommandSink2 *This,
        ID2D1Mesh *mesh,
        ID2D1Brush *brush);

    HRESULT (STDMETHODCALLTYPE *FillOpacityMask)(
        ID2D1CommandSink2 *This,
        ID2D1Bitmap *bitmap,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    HRESULT (STDMETHODCALLTYPE *FillGeometry)(
        ID2D1CommandSink2 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        ID2D1Brush *opacity_brush);

    HRESULT (STDMETHODCALLTYPE *FillRectangle)(
        ID2D1CommandSink2 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush);

    HRESULT (STDMETHODCALLTYPE *PushAxisAlignedClip)(
        ID2D1CommandSink2 *This,
        const D2D1_RECT_F *clip_rect,
        D2D1_ANTIALIAS_MODE antialias_mode);

    HRESULT (STDMETHODCALLTYPE *PushLayer)(
        ID2D1CommandSink2 *This,
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer);

    HRESULT (STDMETHODCALLTYPE *PopAxisAlignedClip)(
        ID2D1CommandSink2 *This);

    HRESULT (STDMETHODCALLTYPE *PopLayer)(
        ID2D1CommandSink2 *This);

    /*** ID2D1CommandSink1 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPrimitiveBlend1)(
        ID2D1CommandSink2 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    /*** ID2D1CommandSink2 methods ***/
    HRESULT (STDMETHODCALLTYPE *DrawInk)(
        ID2D1CommandSink2 *This,
        ID2D1Ink *ink,
        ID2D1Brush *brush,
        ID2D1InkStyle *ink_style);

    HRESULT (STDMETHODCALLTYPE *DrawGradientMesh)(
        ID2D1CommandSink2 *This,
        ID2D1GradientMesh *gradient_mesh);

    HRESULT (STDMETHODCALLTYPE *ID2D1CommandSink2_DrawGdiMetafile)(
        ID2D1CommandSink2 *This,
        ID2D1GdiMetafile *gdi_metafile,
        const D2D1_RECT_F *dest_rect,
        const D2D1_RECT_F *src_rect);

    END_INTERFACE
} ID2D1CommandSink2Vtbl;

interface ID2D1CommandSink2 {
    CONST_VTBL ID2D1CommandSink2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1CommandSink2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1CommandSink2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1CommandSink2_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1CommandSink methods ***/
#define ID2D1CommandSink2_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1CommandSink2_EndDraw(This) (This)->lpVtbl->EndDraw(This)
#define ID2D1CommandSink2_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1CommandSink2_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1CommandSink2_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1CommandSink2_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1CommandSink2_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1CommandSink2_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1CommandSink2_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1CommandSink2_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1CommandSink2_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode) (This)->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode)
#define ID2D1CommandSink2_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1CommandSink2_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1CommandSink2_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1CommandSink2_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform) (This)->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform)
#define ID2D1CommandSink2_DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode) (This)->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode)
#define ID2D1CommandSink2_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1CommandSink2_FillOpacityMask(This,bitmap,brush,dst_rect,src_rect) (This)->lpVtbl->FillOpacityMask(This,bitmap,brush,dst_rect,src_rect)
#define ID2D1CommandSink2_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1CommandSink2_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1CommandSink2_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1CommandSink2_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->PushLayer(This,layer_parameters,layer)
#define ID2D1CommandSink2_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1CommandSink2_PopLayer(This) (This)->lpVtbl->PopLayer(This)
/*** ID2D1CommandSink1 methods ***/
#define ID2D1CommandSink2_SetPrimitiveBlend1(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend1(This,primitive_blend)
/*** ID2D1CommandSink2 methods ***/
#define ID2D1CommandSink2_DrawInk(This,ink,brush,ink_style) (This)->lpVtbl->DrawInk(This,ink,brush,ink_style)
#define ID2D1CommandSink2_DrawGradientMesh(This,gradient_mesh) (This)->lpVtbl->DrawGradientMesh(This,gradient_mesh)
#define ID2D1CommandSink2_DrawGdiMetafile(This,gdi_metafile,dest_rect,src_rect) (This)->lpVtbl->ID2D1CommandSink2_DrawGdiMetafile(This,gdi_metafile,dest_rect,src_rect)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1CommandSink2_QueryInterface(ID2D1CommandSink2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1CommandSink2_AddRef(ID2D1CommandSink2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1CommandSink2_Release(ID2D1CommandSink2* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1CommandSink methods ***/
static inline HRESULT ID2D1CommandSink2_BeginDraw(ID2D1CommandSink2* This) {
    return This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1CommandSink2_EndDraw(ID2D1CommandSink2* This) {
    return This->lpVtbl->EndDraw(This);
}
static inline HRESULT ID2D1CommandSink2_SetAntialiasMode(ID2D1CommandSink2* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline HRESULT ID2D1CommandSink2_SetTags(ID2D1CommandSink2* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    return This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline HRESULT ID2D1CommandSink2_SetTextAntialiasMode(ID2D1CommandSink2* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline HRESULT ID2D1CommandSink2_SetTextRenderingParams(ID2D1CommandSink2* This,IDWriteRenderingParams *text_rendering_params) {
    return This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline HRESULT ID2D1CommandSink2_SetTransform(ID2D1CommandSink2* This,const D2D1_MATRIX_3X2_F *transform) {
    return This->lpVtbl->SetTransform(This,transform);
}
static inline HRESULT ID2D1CommandSink2_SetPrimitiveBlend(ID2D1CommandSink2* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    return This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline HRESULT ID2D1CommandSink2_SetUnitMode(ID2D1CommandSink2* This,D2D1_UNIT_MODE unit_mode) {
    return This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline HRESULT ID2D1CommandSink2_Clear(ID2D1CommandSink2* This,const D2D1_COLOR_F *color) {
    return This->lpVtbl->Clear(This,color);
}
static inline HRESULT ID2D1CommandSink2_DrawGlyphRun(ID2D1CommandSink2* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    return This->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode);
}
static inline HRESULT ID2D1CommandSink2_DrawLine(ID2D1CommandSink2* This,D2D1_POINT_2F p0,D2D1_POINT_2F p1,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    return This->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style);
}
static inline HRESULT ID2D1CommandSink2_DrawGeometry(ID2D1CommandSink2* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    return This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static inline HRESULT ID2D1CommandSink2_DrawRectangle(ID2D1CommandSink2* This,const D2D1_RECT_F *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    return This->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline HRESULT ID2D1CommandSink2_DrawBitmap(ID2D1CommandSink2* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect,const D2D1_MATRIX_4X4_F *perspective_transform) {
    return This->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform);
}
static inline HRESULT ID2D1CommandSink2_DrawImage(ID2D1CommandSink2* This,ID2D1Image *image,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode,D2D1_COMPOSITE_MODE composite_mode) {
    return This->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode);
}
static inline HRESULT ID2D1CommandSink2_FillMesh(ID2D1CommandSink2* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    return This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline HRESULT ID2D1CommandSink2_FillOpacityMask(ID2D1CommandSink2* This,ID2D1Bitmap *bitmap,ID2D1Brush *brush,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    return This->lpVtbl->FillOpacityMask(This,bitmap,brush,dst_rect,src_rect);
}
static inline HRESULT ID2D1CommandSink2_FillGeometry(ID2D1CommandSink2* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    return This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline HRESULT ID2D1CommandSink2_FillRectangle(ID2D1CommandSink2* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    return This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline HRESULT ID2D1CommandSink2_PushAxisAlignedClip(ID2D1CommandSink2* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline HRESULT ID2D1CommandSink2_PushLayer(ID2D1CommandSink2* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    return This->lpVtbl->PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1CommandSink2_PopAxisAlignedClip(ID2D1CommandSink2* This) {
    return This->lpVtbl->PopAxisAlignedClip(This);
}
static inline HRESULT ID2D1CommandSink2_PopLayer(ID2D1CommandSink2* This) {
    return This->lpVtbl->PopLayer(This);
}
/*** ID2D1CommandSink1 methods ***/
static inline HRESULT ID2D1CommandSink2_SetPrimitiveBlend1(ID2D1CommandSink2* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    return This->lpVtbl->SetPrimitiveBlend1(This,primitive_blend);
}
/*** ID2D1CommandSink2 methods ***/
static inline HRESULT ID2D1CommandSink2_DrawInk(ID2D1CommandSink2* This,ID2D1Ink *ink,ID2D1Brush *brush,ID2D1InkStyle *ink_style) {
    return This->lpVtbl->DrawInk(This,ink,brush,ink_style);
}
static inline HRESULT ID2D1CommandSink2_DrawGradientMesh(ID2D1CommandSink2* This,ID2D1GradientMesh *gradient_mesh) {
    return This->lpVtbl->DrawGradientMesh(This,gradient_mesh);
}
static inline HRESULT ID2D1CommandSink2_DrawGdiMetafile(ID2D1CommandSink2* This,ID2D1GdiMetafile *gdi_metafile,const D2D1_RECT_F *dest_rect,const D2D1_RECT_F *src_rect) {
    return This->lpVtbl->ID2D1CommandSink2_DrawGdiMetafile(This,gdi_metafile,dest_rect,src_rect);
}
#endif
#endif

#endif


#endif  /* __ID2D1CommandSink2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1CommandSink3 interface
 */
#ifndef __ID2D1CommandSink3_INTERFACE_DEFINED__
#define __ID2D1CommandSink3_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1CommandSink3, 0x18079135, 0x4cf3, 0x4868, 0xbc,0x8e, 0x06,0x06,0x7e,0x6d,0x24,0x2d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("18079135-4cf3-4868-bc8e-06067e6d242d")
ID2D1CommandSink3 : public ID2D1CommandSink2
{
    virtual HRESULT STDMETHODCALLTYPE DrawSpriteBatch(
        ID2D1SpriteBatch *sprite_batch,
        UINT32 start_index,
        UINT32 sprite_count,
        ID2D1Bitmap *bitmap,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        D2D1_SPRITE_OPTIONS sprite_options) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1CommandSink3, 0x18079135, 0x4cf3, 0x4868, 0xbc,0x8e, 0x06,0x06,0x7e,0x6d,0x24,0x2d)
#endif
#else
typedef struct ID2D1CommandSink3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1CommandSink3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1CommandSink3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1CommandSink3 *This);

    /*** ID2D1CommandSink methods ***/
    HRESULT (STDMETHODCALLTYPE *BeginDraw)(
        ID2D1CommandSink3 *This);

    HRESULT (STDMETHODCALLTYPE *EndDraw)(
        ID2D1CommandSink3 *This);

    HRESULT (STDMETHODCALLTYPE *SetAntialiasMode)(
        ID2D1CommandSink3 *This,
        D2D1_ANTIALIAS_MODE antialias_mode);

    HRESULT (STDMETHODCALLTYPE *SetTags)(
        ID2D1CommandSink3 *This,
        D2D1_TAG tag1,
        D2D1_TAG tag2);

    HRESULT (STDMETHODCALLTYPE *SetTextAntialiasMode)(
        ID2D1CommandSink3 *This,
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode);

    HRESULT (STDMETHODCALLTYPE *SetTextRenderingParams)(
        ID2D1CommandSink3 *This,
        IDWriteRenderingParams *text_rendering_params);

    HRESULT (STDMETHODCALLTYPE *SetTransform)(
        ID2D1CommandSink3 *This,
        const D2D1_MATRIX_3X2_F *transform);

    HRESULT (STDMETHODCALLTYPE *SetPrimitiveBlend)(
        ID2D1CommandSink3 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    HRESULT (STDMETHODCALLTYPE *SetUnitMode)(
        ID2D1CommandSink3 *This,
        D2D1_UNIT_MODE unit_mode);

    HRESULT (STDMETHODCALLTYPE *Clear)(
        ID2D1CommandSink3 *This,
        const D2D1_COLOR_F *color);

    HRESULT (STDMETHODCALLTYPE *DrawGlyphRun)(
        ID2D1CommandSink3 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    HRESULT (STDMETHODCALLTYPE *DrawLine)(
        ID2D1CommandSink3 *This,
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    HRESULT (STDMETHODCALLTYPE *DrawGeometry)(
        ID2D1CommandSink3 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    HRESULT (STDMETHODCALLTYPE *DrawRectangle)(
        ID2D1CommandSink3 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    HRESULT (STDMETHODCALLTYPE *DrawBitmap)(
        ID2D1CommandSink3 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform);

    HRESULT (STDMETHODCALLTYPE *DrawImage)(
        ID2D1CommandSink3 *This,
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode);

    HRESULT (STDMETHODCALLTYPE *DrawGdiMetafile)(
        ID2D1CommandSink3 *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

    HRESULT (STDMETHODCALLTYPE *FillMesh)(
        ID2D1CommandSink3 *This,
        ID2D1Mesh *mesh,
        ID2D1Brush *brush);

    HRESULT (STDMETHODCALLTYPE *FillOpacityMask)(
        ID2D1CommandSink3 *This,
        ID2D1Bitmap *bitmap,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    HRESULT (STDMETHODCALLTYPE *FillGeometry)(
        ID2D1CommandSink3 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        ID2D1Brush *opacity_brush);

    HRESULT (STDMETHODCALLTYPE *FillRectangle)(
        ID2D1CommandSink3 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush);

    HRESULT (STDMETHODCALLTYPE *PushAxisAlignedClip)(
        ID2D1CommandSink3 *This,
        const D2D1_RECT_F *clip_rect,
        D2D1_ANTIALIAS_MODE antialias_mode);

    HRESULT (STDMETHODCALLTYPE *PushLayer)(
        ID2D1CommandSink3 *This,
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer);

    HRESULT (STDMETHODCALLTYPE *PopAxisAlignedClip)(
        ID2D1CommandSink3 *This);

    HRESULT (STDMETHODCALLTYPE *PopLayer)(
        ID2D1CommandSink3 *This);

    /*** ID2D1CommandSink1 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPrimitiveBlend1)(
        ID2D1CommandSink3 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    /*** ID2D1CommandSink2 methods ***/
    HRESULT (STDMETHODCALLTYPE *DrawInk)(
        ID2D1CommandSink3 *This,
        ID2D1Ink *ink,
        ID2D1Brush *brush,
        ID2D1InkStyle *ink_style);

    HRESULT (STDMETHODCALLTYPE *DrawGradientMesh)(
        ID2D1CommandSink3 *This,
        ID2D1GradientMesh *gradient_mesh);

    HRESULT (STDMETHODCALLTYPE *ID2D1CommandSink2_DrawGdiMetafile)(
        ID2D1CommandSink3 *This,
        ID2D1GdiMetafile *gdi_metafile,
        const D2D1_RECT_F *dest_rect,
        const D2D1_RECT_F *src_rect);

    /*** ID2D1CommandSink3 methods ***/
    HRESULT (STDMETHODCALLTYPE *DrawSpriteBatch)(
        ID2D1CommandSink3 *This,
        ID2D1SpriteBatch *sprite_batch,
        UINT32 start_index,
        UINT32 sprite_count,
        ID2D1Bitmap *bitmap,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        D2D1_SPRITE_OPTIONS sprite_options);

    END_INTERFACE
} ID2D1CommandSink3Vtbl;

interface ID2D1CommandSink3 {
    CONST_VTBL ID2D1CommandSink3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1CommandSink3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1CommandSink3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1CommandSink3_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1CommandSink methods ***/
#define ID2D1CommandSink3_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1CommandSink3_EndDraw(This) (This)->lpVtbl->EndDraw(This)
#define ID2D1CommandSink3_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1CommandSink3_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1CommandSink3_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1CommandSink3_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1CommandSink3_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1CommandSink3_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1CommandSink3_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1CommandSink3_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1CommandSink3_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode) (This)->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode)
#define ID2D1CommandSink3_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1CommandSink3_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1CommandSink3_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1CommandSink3_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform) (This)->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform)
#define ID2D1CommandSink3_DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode) (This)->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode)
#define ID2D1CommandSink3_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1CommandSink3_FillOpacityMask(This,bitmap,brush,dst_rect,src_rect) (This)->lpVtbl->FillOpacityMask(This,bitmap,brush,dst_rect,src_rect)
#define ID2D1CommandSink3_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1CommandSink3_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1CommandSink3_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1CommandSink3_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->PushLayer(This,layer_parameters,layer)
#define ID2D1CommandSink3_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1CommandSink3_PopLayer(This) (This)->lpVtbl->PopLayer(This)
/*** ID2D1CommandSink1 methods ***/
#define ID2D1CommandSink3_SetPrimitiveBlend1(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend1(This,primitive_blend)
/*** ID2D1CommandSink2 methods ***/
#define ID2D1CommandSink3_DrawInk(This,ink,brush,ink_style) (This)->lpVtbl->DrawInk(This,ink,brush,ink_style)
#define ID2D1CommandSink3_DrawGradientMesh(This,gradient_mesh) (This)->lpVtbl->DrawGradientMesh(This,gradient_mesh)
#define ID2D1CommandSink3_DrawGdiMetafile(This,gdi_metafile,dest_rect,src_rect) (This)->lpVtbl->ID2D1CommandSink2_DrawGdiMetafile(This,gdi_metafile,dest_rect,src_rect)
/*** ID2D1CommandSink3 methods ***/
#define ID2D1CommandSink3_DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options) (This)->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1CommandSink3_QueryInterface(ID2D1CommandSink3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1CommandSink3_AddRef(ID2D1CommandSink3* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1CommandSink3_Release(ID2D1CommandSink3* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1CommandSink methods ***/
static inline HRESULT ID2D1CommandSink3_BeginDraw(ID2D1CommandSink3* This) {
    return This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1CommandSink3_EndDraw(ID2D1CommandSink3* This) {
    return This->lpVtbl->EndDraw(This);
}
static inline HRESULT ID2D1CommandSink3_SetAntialiasMode(ID2D1CommandSink3* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline HRESULT ID2D1CommandSink3_SetTags(ID2D1CommandSink3* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    return This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline HRESULT ID2D1CommandSink3_SetTextAntialiasMode(ID2D1CommandSink3* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline HRESULT ID2D1CommandSink3_SetTextRenderingParams(ID2D1CommandSink3* This,IDWriteRenderingParams *text_rendering_params) {
    return This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline HRESULT ID2D1CommandSink3_SetTransform(ID2D1CommandSink3* This,const D2D1_MATRIX_3X2_F *transform) {
    return This->lpVtbl->SetTransform(This,transform);
}
static inline HRESULT ID2D1CommandSink3_SetPrimitiveBlend(ID2D1CommandSink3* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    return This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline HRESULT ID2D1CommandSink3_SetUnitMode(ID2D1CommandSink3* This,D2D1_UNIT_MODE unit_mode) {
    return This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline HRESULT ID2D1CommandSink3_Clear(ID2D1CommandSink3* This,const D2D1_COLOR_F *color) {
    return This->lpVtbl->Clear(This,color);
}
static inline HRESULT ID2D1CommandSink3_DrawGlyphRun(ID2D1CommandSink3* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    return This->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode);
}
static inline HRESULT ID2D1CommandSink3_DrawLine(ID2D1CommandSink3* This,D2D1_POINT_2F p0,D2D1_POINT_2F p1,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    return This->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style);
}
static inline HRESULT ID2D1CommandSink3_DrawGeometry(ID2D1CommandSink3* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    return This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static inline HRESULT ID2D1CommandSink3_DrawRectangle(ID2D1CommandSink3* This,const D2D1_RECT_F *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    return This->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline HRESULT ID2D1CommandSink3_DrawBitmap(ID2D1CommandSink3* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect,const D2D1_MATRIX_4X4_F *perspective_transform) {
    return This->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform);
}
static inline HRESULT ID2D1CommandSink3_DrawImage(ID2D1CommandSink3* This,ID2D1Image *image,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode,D2D1_COMPOSITE_MODE composite_mode) {
    return This->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode);
}
static inline HRESULT ID2D1CommandSink3_FillMesh(ID2D1CommandSink3* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    return This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline HRESULT ID2D1CommandSink3_FillOpacityMask(ID2D1CommandSink3* This,ID2D1Bitmap *bitmap,ID2D1Brush *brush,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    return This->lpVtbl->FillOpacityMask(This,bitmap,brush,dst_rect,src_rect);
}
static inline HRESULT ID2D1CommandSink3_FillGeometry(ID2D1CommandSink3* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    return This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline HRESULT ID2D1CommandSink3_FillRectangle(ID2D1CommandSink3* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    return This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline HRESULT ID2D1CommandSink3_PushAxisAlignedClip(ID2D1CommandSink3* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline HRESULT ID2D1CommandSink3_PushLayer(ID2D1CommandSink3* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    return This->lpVtbl->PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1CommandSink3_PopAxisAlignedClip(ID2D1CommandSink3* This) {
    return This->lpVtbl->PopAxisAlignedClip(This);
}
static inline HRESULT ID2D1CommandSink3_PopLayer(ID2D1CommandSink3* This) {
    return This->lpVtbl->PopLayer(This);
}
/*** ID2D1CommandSink1 methods ***/
static inline HRESULT ID2D1CommandSink3_SetPrimitiveBlend1(ID2D1CommandSink3* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    return This->lpVtbl->SetPrimitiveBlend1(This,primitive_blend);
}
/*** ID2D1CommandSink2 methods ***/
static inline HRESULT ID2D1CommandSink3_DrawInk(ID2D1CommandSink3* This,ID2D1Ink *ink,ID2D1Brush *brush,ID2D1InkStyle *ink_style) {
    return This->lpVtbl->DrawInk(This,ink,brush,ink_style);
}
static inline HRESULT ID2D1CommandSink3_DrawGradientMesh(ID2D1CommandSink3* This,ID2D1GradientMesh *gradient_mesh) {
    return This->lpVtbl->DrawGradientMesh(This,gradient_mesh);
}
static inline HRESULT ID2D1CommandSink3_DrawGdiMetafile(ID2D1CommandSink3* This,ID2D1GdiMetafile *gdi_metafile,const D2D1_RECT_F *dest_rect,const D2D1_RECT_F *src_rect) {
    return This->lpVtbl->ID2D1CommandSink2_DrawGdiMetafile(This,gdi_metafile,dest_rect,src_rect);
}
/*** ID2D1CommandSink3 methods ***/
static inline HRESULT ID2D1CommandSink3_DrawSpriteBatch(ID2D1CommandSink3* This,ID2D1SpriteBatch *sprite_batch,UINT32 start_index,UINT32 sprite_count,ID2D1Bitmap *bitmap,D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,D2D1_SPRITE_OPTIONS sprite_options) {
    return This->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options);
}
#endif
#endif

#endif


#endif  /* __ID2D1CommandSink3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1CommandSink4 interface
 */
#ifndef __ID2D1CommandSink4_INTERFACE_DEFINED__
#define __ID2D1CommandSink4_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1CommandSink4, 0xc78a6519, 0x40d6, 0x4218, 0xb2,0xde, 0xbe,0xee,0xb7,0x44,0xbb,0x3e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c78a6519-40d6-4218-b2de-beeeb744bb3e")
ID2D1CommandSink4 : public ID2D1CommandSink3
{
    virtual HRESULT STDMETHODCALLTYPE SetPrimitiveBlend2(
        D2D1_PRIMITIVE_BLEND primitive_blend) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1CommandSink4, 0xc78a6519, 0x40d6, 0x4218, 0xb2,0xde, 0xbe,0xee,0xb7,0x44,0xbb,0x3e)
#endif
#else
typedef struct ID2D1CommandSink4Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1CommandSink4 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1CommandSink4 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1CommandSink4 *This);

    /*** ID2D1CommandSink methods ***/
    HRESULT (STDMETHODCALLTYPE *BeginDraw)(
        ID2D1CommandSink4 *This);

    HRESULT (STDMETHODCALLTYPE *EndDraw)(
        ID2D1CommandSink4 *This);

    HRESULT (STDMETHODCALLTYPE *SetAntialiasMode)(
        ID2D1CommandSink4 *This,
        D2D1_ANTIALIAS_MODE antialias_mode);

    HRESULT (STDMETHODCALLTYPE *SetTags)(
        ID2D1CommandSink4 *This,
        D2D1_TAG tag1,
        D2D1_TAG tag2);

    HRESULT (STDMETHODCALLTYPE *SetTextAntialiasMode)(
        ID2D1CommandSink4 *This,
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode);

    HRESULT (STDMETHODCALLTYPE *SetTextRenderingParams)(
        ID2D1CommandSink4 *This,
        IDWriteRenderingParams *text_rendering_params);

    HRESULT (STDMETHODCALLTYPE *SetTransform)(
        ID2D1CommandSink4 *This,
        const D2D1_MATRIX_3X2_F *transform);

    HRESULT (STDMETHODCALLTYPE *SetPrimitiveBlend)(
        ID2D1CommandSink4 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    HRESULT (STDMETHODCALLTYPE *SetUnitMode)(
        ID2D1CommandSink4 *This,
        D2D1_UNIT_MODE unit_mode);

    HRESULT (STDMETHODCALLTYPE *Clear)(
        ID2D1CommandSink4 *This,
        const D2D1_COLOR_F *color);

    HRESULT (STDMETHODCALLTYPE *DrawGlyphRun)(
        ID2D1CommandSink4 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    HRESULT (STDMETHODCALLTYPE *DrawLine)(
        ID2D1CommandSink4 *This,
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    HRESULT (STDMETHODCALLTYPE *DrawGeometry)(
        ID2D1CommandSink4 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    HRESULT (STDMETHODCALLTYPE *DrawRectangle)(
        ID2D1CommandSink4 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    HRESULT (STDMETHODCALLTYPE *DrawBitmap)(
        ID2D1CommandSink4 *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform);

    HRESULT (STDMETHODCALLTYPE *DrawImage)(
        ID2D1CommandSink4 *This,
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode);

    HRESULT (STDMETHODCALLTYPE *DrawGdiMetafile)(
        ID2D1CommandSink4 *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

    HRESULT (STDMETHODCALLTYPE *FillMesh)(
        ID2D1CommandSink4 *This,
        ID2D1Mesh *mesh,
        ID2D1Brush *brush);

    HRESULT (STDMETHODCALLTYPE *FillOpacityMask)(
        ID2D1CommandSink4 *This,
        ID2D1Bitmap *bitmap,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    HRESULT (STDMETHODCALLTYPE *FillGeometry)(
        ID2D1CommandSink4 *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        ID2D1Brush *opacity_brush);

    HRESULT (STDMETHODCALLTYPE *FillRectangle)(
        ID2D1CommandSink4 *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush);

    HRESULT (STDMETHODCALLTYPE *PushAxisAlignedClip)(
        ID2D1CommandSink4 *This,
        const D2D1_RECT_F *clip_rect,
        D2D1_ANTIALIAS_MODE antialias_mode);

    HRESULT (STDMETHODCALLTYPE *PushLayer)(
        ID2D1CommandSink4 *This,
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer);

    HRESULT (STDMETHODCALLTYPE *PopAxisAlignedClip)(
        ID2D1CommandSink4 *This);

    HRESULT (STDMETHODCALLTYPE *PopLayer)(
        ID2D1CommandSink4 *This);

    /*** ID2D1CommandSink1 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPrimitiveBlend1)(
        ID2D1CommandSink4 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    /*** ID2D1CommandSink2 methods ***/
    HRESULT (STDMETHODCALLTYPE *DrawInk)(
        ID2D1CommandSink4 *This,
        ID2D1Ink *ink,
        ID2D1Brush *brush,
        ID2D1InkStyle *ink_style);

    HRESULT (STDMETHODCALLTYPE *DrawGradientMesh)(
        ID2D1CommandSink4 *This,
        ID2D1GradientMesh *gradient_mesh);

    HRESULT (STDMETHODCALLTYPE *ID2D1CommandSink2_DrawGdiMetafile)(
        ID2D1CommandSink4 *This,
        ID2D1GdiMetafile *gdi_metafile,
        const D2D1_RECT_F *dest_rect,
        const D2D1_RECT_F *src_rect);

    /*** ID2D1CommandSink3 methods ***/
    HRESULT (STDMETHODCALLTYPE *DrawSpriteBatch)(
        ID2D1CommandSink4 *This,
        ID2D1SpriteBatch *sprite_batch,
        UINT32 start_index,
        UINT32 sprite_count,
        ID2D1Bitmap *bitmap,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        D2D1_SPRITE_OPTIONS sprite_options);

    /*** ID2D1CommandSink4 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPrimitiveBlend2)(
        ID2D1CommandSink4 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    END_INTERFACE
} ID2D1CommandSink4Vtbl;

interface ID2D1CommandSink4 {
    CONST_VTBL ID2D1CommandSink4Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1CommandSink4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1CommandSink4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1CommandSink4_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1CommandSink methods ***/
#define ID2D1CommandSink4_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1CommandSink4_EndDraw(This) (This)->lpVtbl->EndDraw(This)
#define ID2D1CommandSink4_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1CommandSink4_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1CommandSink4_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1CommandSink4_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1CommandSink4_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1CommandSink4_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1CommandSink4_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1CommandSink4_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1CommandSink4_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode) (This)->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode)
#define ID2D1CommandSink4_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1CommandSink4_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1CommandSink4_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1CommandSink4_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform) (This)->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform)
#define ID2D1CommandSink4_DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode) (This)->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode)
#define ID2D1CommandSink4_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1CommandSink4_FillOpacityMask(This,bitmap,brush,dst_rect,src_rect) (This)->lpVtbl->FillOpacityMask(This,bitmap,brush,dst_rect,src_rect)
#define ID2D1CommandSink4_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1CommandSink4_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1CommandSink4_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1CommandSink4_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->PushLayer(This,layer_parameters,layer)
#define ID2D1CommandSink4_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1CommandSink4_PopLayer(This) (This)->lpVtbl->PopLayer(This)
/*** ID2D1CommandSink1 methods ***/
#define ID2D1CommandSink4_SetPrimitiveBlend1(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend1(This,primitive_blend)
/*** ID2D1CommandSink2 methods ***/
#define ID2D1CommandSink4_DrawInk(This,ink,brush,ink_style) (This)->lpVtbl->DrawInk(This,ink,brush,ink_style)
#define ID2D1CommandSink4_DrawGradientMesh(This,gradient_mesh) (This)->lpVtbl->DrawGradientMesh(This,gradient_mesh)
#define ID2D1CommandSink4_DrawGdiMetafile(This,gdi_metafile,dest_rect,src_rect) (This)->lpVtbl->ID2D1CommandSink2_DrawGdiMetafile(This,gdi_metafile,dest_rect,src_rect)
/*** ID2D1CommandSink3 methods ***/
#define ID2D1CommandSink4_DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options) (This)->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options)
/*** ID2D1CommandSink4 methods ***/
#define ID2D1CommandSink4_SetPrimitiveBlend2(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend2(This,primitive_blend)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1CommandSink4_QueryInterface(ID2D1CommandSink4* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1CommandSink4_AddRef(ID2D1CommandSink4* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1CommandSink4_Release(ID2D1CommandSink4* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1CommandSink methods ***/
static inline HRESULT ID2D1CommandSink4_BeginDraw(ID2D1CommandSink4* This) {
    return This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1CommandSink4_EndDraw(ID2D1CommandSink4* This) {
    return This->lpVtbl->EndDraw(This);
}
static inline HRESULT ID2D1CommandSink4_SetAntialiasMode(ID2D1CommandSink4* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline HRESULT ID2D1CommandSink4_SetTags(ID2D1CommandSink4* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    return This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline HRESULT ID2D1CommandSink4_SetTextAntialiasMode(ID2D1CommandSink4* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline HRESULT ID2D1CommandSink4_SetTextRenderingParams(ID2D1CommandSink4* This,IDWriteRenderingParams *text_rendering_params) {
    return This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline HRESULT ID2D1CommandSink4_SetTransform(ID2D1CommandSink4* This,const D2D1_MATRIX_3X2_F *transform) {
    return This->lpVtbl->SetTransform(This,transform);
}
static inline HRESULT ID2D1CommandSink4_SetPrimitiveBlend(ID2D1CommandSink4* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    return This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline HRESULT ID2D1CommandSink4_SetUnitMode(ID2D1CommandSink4* This,D2D1_UNIT_MODE unit_mode) {
    return This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline HRESULT ID2D1CommandSink4_Clear(ID2D1CommandSink4* This,const D2D1_COLOR_F *color) {
    return This->lpVtbl->Clear(This,color);
}
static inline HRESULT ID2D1CommandSink4_DrawGlyphRun(ID2D1CommandSink4* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    return This->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode);
}
static inline HRESULT ID2D1CommandSink4_DrawLine(ID2D1CommandSink4* This,D2D1_POINT_2F p0,D2D1_POINT_2F p1,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    return This->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style);
}
static inline HRESULT ID2D1CommandSink4_DrawGeometry(ID2D1CommandSink4* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    return This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static inline HRESULT ID2D1CommandSink4_DrawRectangle(ID2D1CommandSink4* This,const D2D1_RECT_F *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    return This->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline HRESULT ID2D1CommandSink4_DrawBitmap(ID2D1CommandSink4* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect,const D2D1_MATRIX_4X4_F *perspective_transform) {
    return This->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform);
}
static inline HRESULT ID2D1CommandSink4_DrawImage(ID2D1CommandSink4* This,ID2D1Image *image,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode,D2D1_COMPOSITE_MODE composite_mode) {
    return This->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode);
}
static inline HRESULT ID2D1CommandSink4_FillMesh(ID2D1CommandSink4* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    return This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline HRESULT ID2D1CommandSink4_FillOpacityMask(ID2D1CommandSink4* This,ID2D1Bitmap *bitmap,ID2D1Brush *brush,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    return This->lpVtbl->FillOpacityMask(This,bitmap,brush,dst_rect,src_rect);
}
static inline HRESULT ID2D1CommandSink4_FillGeometry(ID2D1CommandSink4* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    return This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline HRESULT ID2D1CommandSink4_FillRectangle(ID2D1CommandSink4* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    return This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline HRESULT ID2D1CommandSink4_PushAxisAlignedClip(ID2D1CommandSink4* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline HRESULT ID2D1CommandSink4_PushLayer(ID2D1CommandSink4* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    return This->lpVtbl->PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1CommandSink4_PopAxisAlignedClip(ID2D1CommandSink4* This) {
    return This->lpVtbl->PopAxisAlignedClip(This);
}
static inline HRESULT ID2D1CommandSink4_PopLayer(ID2D1CommandSink4* This) {
    return This->lpVtbl->PopLayer(This);
}
/*** ID2D1CommandSink1 methods ***/
static inline HRESULT ID2D1CommandSink4_SetPrimitiveBlend1(ID2D1CommandSink4* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    return This->lpVtbl->SetPrimitiveBlend1(This,primitive_blend);
}
/*** ID2D1CommandSink2 methods ***/
static inline HRESULT ID2D1CommandSink4_DrawInk(ID2D1CommandSink4* This,ID2D1Ink *ink,ID2D1Brush *brush,ID2D1InkStyle *ink_style) {
    return This->lpVtbl->DrawInk(This,ink,brush,ink_style);
}
static inline HRESULT ID2D1CommandSink4_DrawGradientMesh(ID2D1CommandSink4* This,ID2D1GradientMesh *gradient_mesh) {
    return This->lpVtbl->DrawGradientMesh(This,gradient_mesh);
}
static inline HRESULT ID2D1CommandSink4_DrawGdiMetafile(ID2D1CommandSink4* This,ID2D1GdiMetafile *gdi_metafile,const D2D1_RECT_F *dest_rect,const D2D1_RECT_F *src_rect) {
    return This->lpVtbl->ID2D1CommandSink2_DrawGdiMetafile(This,gdi_metafile,dest_rect,src_rect);
}
/*** ID2D1CommandSink3 methods ***/
static inline HRESULT ID2D1CommandSink4_DrawSpriteBatch(ID2D1CommandSink4* This,ID2D1SpriteBatch *sprite_batch,UINT32 start_index,UINT32 sprite_count,ID2D1Bitmap *bitmap,D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,D2D1_SPRITE_OPTIONS sprite_options) {
    return This->lpVtbl->DrawSpriteBatch(This,sprite_batch,start_index,sprite_count,bitmap,interpolation_mode,sprite_options);
}
/*** ID2D1CommandSink4 methods ***/
static inline HRESULT ID2D1CommandSink4_SetPrimitiveBlend2(ID2D1CommandSink4* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    return This->lpVtbl->SetPrimitiveBlend2(This,primitive_blend);
}
#endif
#endif

#endif


#endif  /* __ID2D1CommandSink4_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __d2d1_3_h__ */
