Path: blob/master/src/java.desktop/share/native/libawt/java2d/loops/GraphicsPrimitiveMgr.h
41159 views
/*1* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425#ifndef GraphicsPrimitiveMgr_h_Included26#define GraphicsPrimitiveMgr_h_Included2728#ifdef __cplusplus29extern "C" {30#endif3132#include <stddef.h>33#include "jni.h"3435#include "java_awt_AlphaComposite.h"3637#include "SurfaceData.h"38#include "SpanIterator.h"3940#include "j2d_md.h"4142#include "AlphaMath.h"43#include "GlyphImageRef.h"4445/*46* This structure contains all of the information about a particular47* type of GraphicsPrimitive, such as a FillRect, a MaskFill, or a Blit.48*49* A global collection of these structures is declared and initialized50* to contain the necessary Java (JNI) information so that appropriate51* Java GraphicsPrimitive objects can be quickly constructed for a set52* of native loops simply by referencing the necessary entry from that53* collection for the type of primitive being registered.54*55* See PrimitiveTypes.{Blit,BlitBg,FillRect,...} below.56*/57typedef struct _PrimitiveType {58char *ClassName;59jint srcflags;60jint dstflags;61jclass ClassObject;62jmethodID Constructor;63} PrimitiveType;6465/* The integer constants to identify the compositing rule being defined. */66#define RULE_Xor (java_awt_AlphaComposite_MIN_RULE - 1)67#define RULE_Clear java_awt_AlphaComposite_CLEAR68#define RULE_Src java_awt_AlphaComposite_SRC69#define RULE_SrcOver java_awt_AlphaComposite_SRC_OVER70#define RULE_DstOver java_awt_AlphaComposite_DST_OVER71#define RULE_SrcIn java_awt_AlphaComposite_SRC_IN72#define RULE_DstIn java_awt_AlphaComposite_DST_IN73#define RULE_SrcOut java_awt_AlphaComposite_SRC_OUT74#define RULE_DstOut java_awt_AlphaComposite_DST_OUT7576/*77* This structure holds the information retrieved from a Java78* Composite object for easy transfer to various C functions79* that implement the inner loop for a native primitive.80*81* Currently only AlphaComposite and XORComposite are supported.82*/83typedef struct _CompositeInfo {84jint rule; /* See RULE_* constants above */85union {86jfloat extraAlpha; /* from AlphaComposite */87jint xorPixel; /* from XORComposite */88} details;89juint alphaMask; /* from XORComposite */90} CompositeInfo;9192/*93* This structure is the common header for the two native structures94* that hold information about a particular SurfaceType or CompositeType.95*96* A global collection of these structures is declared and initialized97* to contain the necessary Java (JNI) information so that appropriate98* Java GraphicsPrimitive objects can be quickly constructed for a set99* of native loops simply by referencing the necessary entry from that100* collection for the type of composite or surface being implemented.101*102* See SurfaceTypes.{OpaqueColor,IntArgb,ByteGray,...} below.103* See CompositeTypes.{Xor,AnyAlpha,...} below.104*/105typedef struct _SurfCompHdr {106char *Name;107jobject Object;108} SurfCompHdr;109110/*111* The definitions for the SurfaceType structure described above.112*/113114/*115* The signature for a function that returns the specific integer116* format pixel for a given ARGB color value for a particular117* SurfaceType implementation.118* This function is valid only after GetRasInfo call for the119* associated surface.120*/121typedef jint (PixelForFunc)(SurfaceDataRasInfo *pRasInfo, jint rgb);122123/*124* The additional information needed to manipulate a surface:125* - The pixelFor function for translating ARGB values.126* Valid only after GetRasInfo call for this surface.127* - The additional flags needed when reading from this surface.128* - The additional flags needed when writing to this surface.129*/130typedef struct _SurfaceType {131SurfCompHdr hdr;132PixelForFunc *pixelFor;133jint readflags;134jint writeflags;135} SurfaceType;136137/*138* The definitions for the CompositeType structure described above.139*/140141/*142* The signature for a function that fills in a CompositeInfo143* structure from the information present in a given Java Composite144* object.145*/146typedef void (JNICALL CompInfoFunc)(JNIEnv *env,147CompositeInfo *pCompInfo,148jobject Composite);149150/*151* The additional information needed to implement a primitive that152* performs a particular composite operation:153* - The getCompInfo function for filling in a CompositeInfo structure.154* - The additional flags needed for locking the destination surface.155*/156typedef struct _CompositeType {157SurfCompHdr hdr;158CompInfoFunc *getCompInfo;159jint dstflags;160} CompositeType;161162/*163* The signature of the native functions that register a set of164* related native GraphicsPrimitive functions.165*/166typedef jboolean (RegisterFunc)(JNIEnv *env);167168struct _NativePrimitive; /* forward reference for function typedefs */169170/*171* This empty function signature represents an "old pre-ANSI style"172* function declaration which makes no claims about the argument list173* other than that the types of the arguments will undergo argument174* promotion in the calling conventions.175* (See section A7.3.2 in K&R 2nd edition.)176*177* When trying to statically initialize the function pointer field of178* a NativePrimitive structure, which is a union of all possible179* inner loop function signatures, the initializer constant must be180* compatible with the first field in the union. This generic function181* type allows us to assign any function pointer to that union as long182* as it meets the requirements specified above (i.e. all arguments183* are compatible with their promoted values according to the old184* style argument promotion calling semantics).185*186* Note: This means that you cannot define an argument to any of187* these native functions which is a byte or a short as that value188* would not be passed in the same way for an ANSI-style full prototype189* calling convention and an old-style argument promotion calling190* convention.191*/192typedef void (AnyFunc)();193194/*195* The signature of the inner loop function for a "Blit".196*/197typedef void (BlitFunc)(void *pSrc, void *pDst,198juint width, juint height,199SurfaceDataRasInfo *pSrcInfo,200SurfaceDataRasInfo *pDstInfo,201struct _NativePrimitive *pPrim,202CompositeInfo *pCompInfo);203204/*205* The signature of the inner loop function for a "BlitBg".206*/207typedef void (BlitBgFunc)(void *pSrc, void *pDst,208juint width, juint height, jint bgpixel,209SurfaceDataRasInfo *pSrcInfo,210SurfaceDataRasInfo *pDstInfo,211struct _NativePrimitive *pPrim,212CompositeInfo *pCompInfo);213214/*215* The signature of the inner loop function for a "ScaleBlit".216*/217typedef void (ScaleBlitFunc)(void *pSrc, void *pDst,218juint dstwidth, juint dstheight,219jint sxloc, jint syloc,220jint sxinc, jint syinc, jint scale,221SurfaceDataRasInfo *pSrcInfo,222SurfaceDataRasInfo *pDstInfo,223struct _NativePrimitive *pPrim,224CompositeInfo *pCompInfo);225226/*227* The signature of the inner loop function for a "FillRect".228*/229typedef void (FillRectFunc)(SurfaceDataRasInfo *pRasInfo,230jint lox, jint loy,231jint hix, jint hiy,232jint pixel, struct _NativePrimitive *pPrim,233CompositeInfo *pCompInfo);234235/*236* The signature of the inner loop function for a "FillSpans".237*/238typedef void (FillSpansFunc)(SurfaceDataRasInfo *pRasInfo,239SpanIteratorFuncs *pSpanFuncs, void *siData,240jint pixel, struct _NativePrimitive *pPrim,241CompositeInfo *pCompInfo);242243/*244* The signature of the inner loop function for a "DrawLine".245* Note that this same inner loop is used for native DrawRect246* and DrawPolygons primitives.247*/248typedef void (DrawLineFunc)(SurfaceDataRasInfo *pRasInfo,249jint x1, jint y1, jint pixel,250jint steps, jint error,251jint bumpmajormask, jint errmajor,252jint bumpminormask, jint errminor,253struct _NativePrimitive *pPrim,254CompositeInfo *pCompInfo);255256/*257* The signature of the inner loop function for a "MaskFill".258*/259typedef void (MaskFillFunc)(void *pRas,260unsigned char *pMask, jint maskOff, jint maskScan,261jint width, jint height,262jint fgColor,263SurfaceDataRasInfo *pRasInfo,264struct _NativePrimitive *pPrim,265CompositeInfo *pCompInfo);266267/*268* The signature of the inner loop function for a "MaskBlit".269*/270typedef void (MaskBlitFunc)(void *pDst, void *pSrc,271unsigned char *pMask, jint maskOff, jint maskScan,272jint width, jint height,273SurfaceDataRasInfo *pDstInfo,274SurfaceDataRasInfo *pSrcInfo,275struct _NativePrimitive *pPrim,276CompositeInfo *pCompInfo);277/*278* The signature of the inner loop function for a "DrawGlyphList".279*/280typedef void (DrawGlyphListFunc)(SurfaceDataRasInfo *pRasInfo,281ImageRef *glyphs,282jint totalGlyphs,283jint fgpixel, jint fgcolor,284jint cx1, jint cy1,285jint cx2, jint cy2,286struct _NativePrimitive *pPrim,287CompositeInfo *pCompInfo);288289/*290* The signature of the inner loop function for a "DrawGlyphListAA".291*/292typedef void (DrawGlyphListAAFunc)(SurfaceDataRasInfo *pRasInfo,293ImageRef *glyphs,294jint totalGlyphs,295jint fgpixel, jint fgcolor,296jint cx1, jint cy1,297jint cx2, jint cy2,298struct _NativePrimitive *pPrim,299CompositeInfo *pCompInfo);300301/*302* The signature of the inner loop function for a "DrawGlyphListLCD".303* rgbOrder is a jint rather than a jboolean so that this typedef matches304* AnyFunc which is the first element in a union in NativePrimitive's305* initialiser. See the comments alongside declaration of the AnyFunc type for306* a full explanation.307*/308typedef void (DrawGlyphListLCDFunc)(SurfaceDataRasInfo *pRasInfo,309ImageRef *glyphs,310jint totalGlyphs,311jint fgpixel, jint fgcolor,312jint cx1, jint cy1,313jint cx2, jint cy2,314jint rgbOrder,315unsigned char *gammaLut,316unsigned char *invGammaLut,317struct _NativePrimitive *pPrim,318CompositeInfo *pCompInfo);319320/*321* The signature of the inner loop functions for a "TransformHelper".322*/323typedef void (TransformHelperFunc)(SurfaceDataRasInfo *pSrcInfo,324jint *pRGB, jint numpix,325jlong xlong, jlong dxlong,326jlong ylong, jlong dylong);327328typedef struct {329TransformHelperFunc *nnHelper;330TransformHelperFunc *blHelper;331TransformHelperFunc *bcHelper;332} TransformHelperFuncs;333334typedef void (TransformInterpFunc)(jint *pRGBbase, jint numpix,335jint xfract, jint dxfract,336jint yfract, jint dyfract);337338/*339* The signature of the inner loop function for a "FillParallelogram"340* Note that this same inner loop is used for native DrawParallelogram341* primitives.342* Note that these functions are paired with equivalent DrawLine343* inner loop functions to facilitate nicer looking and faster thin344* transformed drawrect calls.345*/346typedef void (FillParallelogramFunc)(SurfaceDataRasInfo *pRasInfo,347jint lox, jint loy, jint hix, jint hiy,348jlong leftx, jlong dleftx,349jlong rightx, jlong drightx,350jint pixel, struct _NativePrimitive *pPrim,351CompositeInfo *pCompInfo);352353typedef struct {354FillParallelogramFunc *fillpgram;355DrawLineFunc *drawline;356} DrawParallelogramFuncs;357358/*359* This structure contains all information for defining a single360* native GraphicsPrimitive, including:361* - The information about the type of the GraphicsPrimitive subclass.362* - The information about the type of the source surface.363* - The information about the type of the compositing operation.364* - The information about the type of the destination surface.365* - A pointer to the function that performs the actual inner loop work.366* - Extra flags needed for locking the source and destination surfaces367* above and beyond the flags specified in the Primitive, Composite368* and SurfaceType structures. (For most native primitives these369* flags can be calculated automatically from information stored in370* the PrimitiveType, SurfaceType, and CompositeType structures.)371*/372typedef struct _NativePrimitive {373PrimitiveType *pPrimType;374SurfaceType *pSrcType;375CompositeType *pCompType;376SurfaceType *pDstType;377/* See declaration of AnyFunc type above for comments explaining why378* only AnyFunc is used by the initializers for these union fields379* and consequent type restrictions.380*/381union {382AnyFunc *initializer;383BlitFunc *blit;384BlitBgFunc *blitbg;385ScaleBlitFunc *scaledblit;386FillRectFunc *fillrect;387FillSpansFunc *fillspans;388FillParallelogramFunc *fillparallelogram;389DrawParallelogramFuncs *drawparallelogram;390DrawLineFunc *drawline;391MaskFillFunc *maskfill;392MaskBlitFunc *maskblit;393DrawGlyphListFunc *drawglyphlist;394DrawGlyphListFunc *drawglyphlistaa;395DrawGlyphListLCDFunc *drawglyphlistlcd;396TransformHelperFuncs *transformhelpers;397} funcs, funcs_c;398jint srcflags;399jint dstflags;400} NativePrimitive;401402/*403* The global collection of all primitive types. Specific NativePrimitive404* structures can be statically initialized by pointing to these structures.405*/406extern struct _PrimitiveTypes {407PrimitiveType Blit;408PrimitiveType BlitBg;409PrimitiveType ScaledBlit;410PrimitiveType FillRect;411PrimitiveType FillSpans;412PrimitiveType FillParallelogram;413PrimitiveType DrawParallelogram;414PrimitiveType DrawLine;415PrimitiveType DrawRect;416PrimitiveType DrawPolygons;417PrimitiveType DrawPath;418PrimitiveType FillPath;419PrimitiveType MaskBlit;420PrimitiveType MaskFill;421PrimitiveType DrawGlyphList;422PrimitiveType DrawGlyphListAA;423PrimitiveType DrawGlyphListLCD;424PrimitiveType TransformHelper;425} PrimitiveTypes;426427/*428* The global collection of all surface types. Specific NativePrimitive429* structures can be statically initialized by pointing to these structures.430*/431extern struct _SurfaceTypes {432SurfaceType OpaqueColor;433SurfaceType AnyColor;434SurfaceType AnyByte;435SurfaceType ByteBinary1Bit;436SurfaceType ByteBinary2Bit;437SurfaceType ByteBinary4Bit;438SurfaceType ByteIndexed;439SurfaceType ByteIndexedBm;440SurfaceType ByteGray;441SurfaceType Index8Gray;442SurfaceType Index12Gray;443SurfaceType AnyShort;444SurfaceType Ushort555Rgb;445SurfaceType Ushort555Rgbx;446SurfaceType Ushort565Rgb;447SurfaceType Ushort4444Argb;448SurfaceType UshortGray;449SurfaceType UshortIndexed;450SurfaceType Any3Byte;451SurfaceType ThreeByteBgr;452SurfaceType AnyInt;453SurfaceType IntArgb;454SurfaceType IntArgbPre;455SurfaceType IntArgbBm;456SurfaceType IntRgb;457SurfaceType IntBgr;458SurfaceType IntRgbx;459SurfaceType Any4Byte;460SurfaceType FourByteAbgr;461SurfaceType FourByteAbgrPre;462} SurfaceTypes;463464/*465* The global collection of all composite types. Specific NativePrimitive466* structures can be statically initialized by pointing to these structures.467*/468extern struct _CompositeTypes {469CompositeType SrcNoEa;470CompositeType SrcOverNoEa;471CompositeType SrcOverBmNoEa;472CompositeType Src;473CompositeType SrcOver;474CompositeType Xor;475CompositeType AnyAlpha;476} CompositeTypes;477478#define ArraySize(A) (sizeof(A) / sizeof(A[0]))479480#define PtrAddBytes(p, b) ((void *) (((intptr_t) (p)) + (b)))481#define PtrCoord(p, x, xinc, y, yinc) PtrAddBytes(p, \482((ptrdiff_t)(y))*(yinc) + \483((ptrdiff_t)(x))*(xinc))484#define PtrPixelsRow(p, y, scanStride) PtrAddBytes(p, \485((intptr_t) (y)) * (scanStride))486487#define PtrPixelsBand(p, y, length, elemSize) PtrAddBytes(p, \488((intptr_t) (y)) * (length) * (elemSize))489490/*491* The function to call with an array of NativePrimitive structures492* to register them with the Java GraphicsPrimitiveMgr.493*/494extern jboolean RegisterPrimitives(JNIEnv *env,495NativePrimitive *pPrim,496jint NumPrimitives);497498/*499* The utility function to retrieve the NativePrimitive structure500* from a given Java GraphicsPrimitive object.501*/502extern JNIEXPORT NativePrimitive * JNICALL503GetNativePrim(JNIEnv *env, jobject gp);504505/*506* Utility functions to get values from a Java SunGraphics2D or Color object.507*/508extern JNIEXPORT void JNICALL509GrPrim_Sg2dGetCompInfo(JNIEnv *env, jobject sg2d,510NativePrimitive *pPrim,511CompositeInfo *pCompInfo);512extern JNIEXPORT jint JNICALL513GrPrim_CompGetXorColor(JNIEnv *env, jobject comp);514extern JNIEXPORT void JNICALL515GrPrim_CompGetXorInfo(JNIEnv *env, CompositeInfo *pCompInfo, jobject comp);516extern JNIEXPORT void JNICALL517GrPrim_CompGetAlphaInfo(JNIEnv *env, CompositeInfo *pCompInfo, jobject comp);518519extern JNIEXPORT void JNICALL520GrPrim_Sg2dGetClip(JNIEnv *env, jobject sg2d,521SurfaceDataBounds *bounds);522523extern JNIEXPORT jint JNICALL524GrPrim_Sg2dGetPixel(JNIEnv *env, jobject sg2d);525extern JNIEXPORT jint JNICALL526GrPrim_Sg2dGetEaRGB(JNIEnv *env, jobject sg2d);527extern JNIEXPORT jint JNICALL528GrPrim_Sg2dGetLCDTextContrast(JNIEnv *env, jobject sg2d);529530/*531* Data structure and functions to retrieve and use532* AffineTransform objects from the native level.533*/534typedef struct {535jdouble dxdx; /* dx in dest space for each dx in src space */536jdouble dxdy; /* dx in dest space for each dy in src space */537jdouble tx;538jdouble dydx; /* dy in dest space for each dx in src space */539jdouble dydy; /* dy in dest space for each dy in src space */540jdouble ty;541} TransformInfo;542543extern JNIEXPORT void JNICALL544Transform_GetInfo(JNIEnv *env, jobject txform, TransformInfo *pTxInfo);545extern JNIEXPORT void JNICALL546Transform_transform(TransformInfo *pTxInfo, jdouble *pX, jdouble *pY);547548void GrPrim_RefineBounds(SurfaceDataBounds *bounds, jint transX, jint transY,549jfloat *coords, jint maxCoords);550551JNIEXPORT extern jfieldID path2DTypesID;552JNIEXPORT extern jfieldID path2DNumTypesID;553JNIEXPORT extern jfieldID path2DWindingRuleID;554JNIEXPORT extern jfieldID path2DFloatCoordsID;555JNIEXPORT extern jfieldID sg2dStrokeHintID;556JNIEXPORT extern jint sunHints_INTVAL_STROKE_PURE;557558/*559* Macros for using jlong variables as 32bits.32bits fractional values560*/561#define LongOneHalf (((jlong) 1) << 31)562#define IntToLong(i) (((jlong) (i)) << 32)563#define DblToLong(d) ((jlong) ((d) * IntToLong(1)))564#define LongToDbl(l) (((jdouble) l) / IntToLong(1))565#define WholeOfLong(l) ((jint) ((l) >> 32))566#define FractOfLong(l) ((jint) (l))567#define URShift(i, n) (((juint) (i)) >> (n))568569/*570* Macros to help in defining arrays of NativePrimitive structures.571*572* These macros are the very base macros. More specific macros are573* defined in LoopMacros.h.574*575* Note that the DrawLine, DrawRect, and DrawPolygons primitives are576* all registered together from a single shared native function pointer.577*/578579#define REGISTER_PRIMITIVE(TYPE, SRC, COMP, DST, FUNC) \580{ \581& PrimitiveTypes.TYPE, \582& SurfaceTypes.SRC, \583& CompositeTypes.COMP, \584& SurfaceTypes.DST, \585{FUNC}, \586{FUNC}, \5870, \5880 \589}590591#define REGISTER_PRIMITIVE_FLAGS(TYPE, SRC, COMP, DST, FUNC, SFLAGS, DFLAGS) \592{ \593& PrimitiveTypes.TYPE, \594& SurfaceTypes.SRC, \595& CompositeTypes.COMP, \596& SurfaceTypes.DST, \597{FUNC}, \598{FUNC}, \599SFLAGS, \600DFLAGS, \601}602603#define REGISTER_BLIT(SRC, COMP, DST, FUNC) \604REGISTER_PRIMITIVE(Blit, SRC, COMP, DST, FUNC)605606#define REGISTER_BLIT_FLAGS(SRC, COMP, DST, FUNC, SFLAGS, DFLAGS) \607REGISTER_PRIMITIVE_FLAGS(Blit, SRC, COMP, DST, FUNC, SFLAGS, DFLAGS)608609#define REGISTER_SCALEBLIT(SRC, COMP, DST, FUNC) \610REGISTER_PRIMITIVE(ScaledBlit, SRC, COMP, DST, FUNC)611612#define REGISTER_SCALEBLIT_FLAGS(SRC, COMP, DST, FUNC, SFLAGS, DFLAGS) \613REGISTER_PRIMITIVE_FLAGS(ScaledBlit, SRC, COMP, DST, FUNC, SFLAGS, DFLAGS)614615#define REGISTER_BLITBG(SRC, COMP, DST, FUNC) \616REGISTER_PRIMITIVE(BlitBg, SRC, COMP, DST, FUNC)617618#define REGISTER_FILLRECT(SRC, COMP, DST, FUNC) \619REGISTER_PRIMITIVE(FillRect, SRC, COMP, DST, FUNC)620621#define REGISTER_FILLSPANS(SRC, COMP, DST, FUNC) \622REGISTER_PRIMITIVE(FillSpans, SRC, COMP, DST, FUNC)623624#define REGISTER_FILLPGRAM(SRC, COMP, DST, FUNC) \625REGISTER_PRIMITIVE(FillParallelogram, SRC, COMP, DST, FUNC), \626REGISTER_PRIMITIVE(DrawParallelogram, SRC, COMP, DST, FUNC)627628#define REGISTER_LINE_PRIMITIVES(SRC, COMP, DST, FUNC) \629REGISTER_PRIMITIVE(DrawLine, SRC, COMP, DST, FUNC), \630REGISTER_PRIMITIVE(DrawRect, SRC, COMP, DST, FUNC), \631REGISTER_PRIMITIVE(DrawPolygons, SRC, COMP, DST, FUNC), \632REGISTER_PRIMITIVE(DrawPath, SRC, COMP, DST, FUNC), \633REGISTER_PRIMITIVE(FillPath, SRC, COMP, DST, FUNC)634635#define REGISTER_MASKBLIT(SRC, COMP, DST, FUNC) \636REGISTER_PRIMITIVE(MaskBlit, SRC, COMP, DST, FUNC)637638#define REGISTER_MASKFILL(SRC, COMP, DST, FUNC) \639REGISTER_PRIMITIVE(MaskFill, SRC, COMP, DST, FUNC)640641#define REGISTER_DRAWGLYPHLIST(SRC, COMP, DST, FUNC) \642REGISTER_PRIMITIVE(DrawGlyphList, SRC, COMP, DST, FUNC)643644#define REGISTER_DRAWGLYPHLISTAA(SRC, COMP, DST, FUNC) \645REGISTER_PRIMITIVE(DrawGlyphListAA, SRC, COMP, DST, FUNC)646647#define REGISTER_DRAWGLYPHLISTLCD(SRC, COMP, DST, FUNC) \648REGISTER_PRIMITIVE(DrawGlyphListLCD, SRC, COMP, DST, FUNC)649650#ifdef __cplusplus651};652#endif653654#endif /* GraphicsPrimitiveMgr_h_Included */655656657