Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h
38918 views
/*1* Copyright (c) 2000, 2013, 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>3334#include "java_awt_AlphaComposite.h"3536#include "SurfaceData.h"37#include "SpanIterator.h"3839#include "j2d_md.h"4041#include "AlphaMath.h"42#include "GlyphImageRef.h"4344/*45* This structure contains all of the information about a particular46* type of GraphicsPrimitive, such as a FillRect, a MaskFill, or a Blit.47*48* A global collection of these structures is declared and initialized49* to contain the necessary Java (JNI) information so that appropriate50* Java GraphicsPrimitive objects can be quickly constructed for a set51* of native loops simply by referencing the necessary entry from that52* collection for the type of primitive being registered.53*54* See PrimitiveTypes.{Blit,BlitBg,FillRect,...} below.55*/56typedef struct _PrimitiveType {57char *ClassName;58jint srcflags;59jint dstflags;60jclass ClassObject;61jmethodID Constructor;62} PrimitiveType;6364/* The integer constants to identify the compositing rule being defined. */65#define RULE_Xor (java_awt_AlphaComposite_MIN_RULE - 1)66#define RULE_Clear java_awt_AlphaComposite_CLEAR67#define RULE_Src java_awt_AlphaComposite_SRC68#define RULE_SrcOver java_awt_AlphaComposite_SRC_OVER69#define RULE_DstOver java_awt_AlphaComposite_DST_OVER70#define RULE_SrcIn java_awt_AlphaComposite_SRC_IN71#define RULE_DstIn java_awt_AlphaComposite_DST_IN72#define RULE_SrcOut java_awt_AlphaComposite_SRC_OUT73#define RULE_DstOut java_awt_AlphaComposite_DST_OUT7475/*76* This structure holds the information retrieved from a Java77* Composite object for easy transfer to various C functions78* that implement the inner loop for a native primitive.79*80* Currently only AlphaComposite and XORComposite are supported.81*/82typedef struct _CompositeInfo {83jint rule; /* See RULE_* constants above */84union {85jfloat extraAlpha; /* from AlphaComposite */86jint xorPixel; /* from XORComposite */87} details;88juint alphaMask; /* from XORComposite */89} CompositeInfo;9091/*92* This structure is the common header for the two native structures93* that hold information about a particular SurfaceType or CompositeType.94*95* A global collection of these structures is declared and initialized96* to contain the necessary Java (JNI) information so that appropriate97* Java GraphicsPrimitive objects can be quickly constructed for a set98* of native loops simply by referencing the necessary entry from that99* collection for the type of composite or surface being implemented.100*101* See SurfaceTypes.{OpaqueColor,IntArgb,ByteGray,...} below.102* See CompositeTypes.{Xor,AnyAlpha,...} below.103*/104typedef struct _SurfCompHdr {105char *Name;106jobject Object;107} SurfCompHdr;108109/*110* The definitions for the SurfaceType structure described above.111*/112113/*114* The signature for a function that returns the specific integer115* format pixel for a given ARGB color value for a particular116* SurfaceType implementation.117* This function is valid only after GetRasInfo call for the118* associated surface.119*/120typedef jint (PixelForFunc)(SurfaceDataRasInfo *pRasInfo, jint rgb);121122/*123* The additional information needed to manipulate a surface:124* - The pixelFor function for translating ARGB values.125* Valid only after GetRasInfo call for this surface.126* - The additional flags needed when reading from this surface.127* - The additional flags needed when writing to this surface.128*/129typedef struct _SurfaceType {130SurfCompHdr hdr;131PixelForFunc *pixelFor;132jint readflags;133jint writeflags;134} SurfaceType;135136/*137* The definitions for the CompositeType structure described above.138*/139140/*141* The signature for a function that fills in a CompositeInfo142* structure from the information present in a given Java Composite143* object.144*/145typedef void (JNICALL CompInfoFunc)(JNIEnv *env,146CompositeInfo *pCompInfo,147jobject Composite);148149/*150* The additional information needed to implement a primitive that151* performs a particular composite operation:152* - The getCompInfo function for filling in a CompositeInfo structure.153* - The additional flags needed for locking the destination surface.154*/155typedef struct _CompositeType {156SurfCompHdr hdr;157CompInfoFunc *getCompInfo;158jint dstflags;159} CompositeType;160161/*162* The signature of the native functions that register a set of163* related native GraphicsPrimitive functions.164*/165typedef jboolean (RegisterFunc)(JNIEnv *env);166167struct _NativePrimitive; /* forward reference for function typedefs */168169/*170* This empty function signature represents an "old pre-ANSI style"171* function declaration which makes no claims about the argument list172* other than that the types of the arguments will undergo argument173* promotion in the calling conventions.174* (See section A7.3.2 in K&R 2nd edition.)175*176* When trying to statically initialize the function pointer field of177* a NativePrimitive structure, which is a union of all possible178* inner loop function signatures, the initializer constant must be179* compatible with the first field in the union. This generic function180* type allows us to assign any function pointer to that union as long181* as it meets the requirements specified above (i.e. all arguments182* are compatible with their promoted values according to the old183* style argument promotion calling semantics).184*185* Note: This means that you cannot define an argument to any of186* these native functions which is a byte or a short as that value187* would not be passed in the same way for an ANSI-style full prototype188* calling convention and an old-style argument promotion calling189* convention.190*/191typedef void (AnyFunc)();192193/*194* The signature of the inner loop function for a "Blit".195*/196typedef void (BlitFunc)(void *pSrc, void *pDst,197juint width, juint height,198SurfaceDataRasInfo *pSrcInfo,199SurfaceDataRasInfo *pDstInfo,200struct _NativePrimitive *pPrim,201CompositeInfo *pCompInfo);202203/*204* The signature of the inner loop function for a "BlitBg".205*/206typedef void (BlitBgFunc)(void *pSrc, void *pDst,207juint width, juint height, jint bgpixel,208SurfaceDataRasInfo *pSrcInfo,209SurfaceDataRasInfo *pDstInfo,210struct _NativePrimitive *pPrim,211CompositeInfo *pCompInfo);212213/*214* The signature of the inner loop function for a "ScaleBlit".215*/216typedef void (ScaleBlitFunc)(void *pSrc, void *pDst,217juint dstwidth, juint dstheight,218jint sxloc, jint syloc,219jint sxinc, jint syinc, jint scale,220SurfaceDataRasInfo *pSrcInfo,221SurfaceDataRasInfo *pDstInfo,222struct _NativePrimitive *pPrim,223CompositeInfo *pCompInfo);224225/*226* The signature of the inner loop function for a "FillRect".227*/228typedef void (FillRectFunc)(SurfaceDataRasInfo *pRasInfo,229jint lox, jint loy,230jint hix, jint hiy,231jint pixel, struct _NativePrimitive *pPrim,232CompositeInfo *pCompInfo);233234/*235* The signature of the inner loop function for a "FillSpans".236*/237typedef void (FillSpansFunc)(SurfaceDataRasInfo *pRasInfo,238SpanIteratorFuncs *pSpanFuncs, void *siData,239jint pixel, struct _NativePrimitive *pPrim,240CompositeInfo *pCompInfo);241242/*243* The signature of the inner loop function for a "DrawLine".244* Note that this same inner loop is used for native DrawRect245* and DrawPolygons primitives.246*/247typedef void (DrawLineFunc)(SurfaceDataRasInfo *pRasInfo,248jint x1, jint y1, jint pixel,249jint steps, jint error,250jint bumpmajormask, jint errmajor,251jint bumpminormask, jint errminor,252struct _NativePrimitive *pPrim,253CompositeInfo *pCompInfo);254255/*256* The signature of the inner loop function for a "MaskFill".257*/258typedef void (MaskFillFunc)(void *pRas,259unsigned char *pMask, jint maskOff, jint maskScan,260jint width, jint height,261jint fgColor,262SurfaceDataRasInfo *pRasInfo,263struct _NativePrimitive *pPrim,264CompositeInfo *pCompInfo);265266/*267* The signature of the inner loop function for a "MaskBlit".268*/269typedef void (MaskBlitFunc)(void *pDst, void *pSrc,270unsigned char *pMask, jint maskOff, jint maskScan,271jint width, jint height,272SurfaceDataRasInfo *pDstInfo,273SurfaceDataRasInfo *pSrcInfo,274struct _NativePrimitive *pPrim,275CompositeInfo *pCompInfo);276/*277* The signature of the inner loop function for a "DrawGlyphList".278*/279typedef void (DrawGlyphListFunc)(SurfaceDataRasInfo *pRasInfo,280ImageRef *glyphs,281jint totalGlyphs,282jint fgpixel, jint fgcolor,283jint cx1, jint cy1,284jint cx2, jint cy2,285struct _NativePrimitive *pPrim,286CompositeInfo *pCompInfo);287288/*289* The signature of the inner loop function for a "DrawGlyphListAA".290*/291typedef void (DrawGlyphListAAFunc)(SurfaceDataRasInfo *pRasInfo,292ImageRef *glyphs,293jint totalGlyphs,294jint fgpixel, jint fgcolor,295jint cx1, jint cy1,296jint cx2, jint cy2,297struct _NativePrimitive *pPrim,298CompositeInfo *pCompInfo);299300/*301* The signature of the inner loop function for a "DrawGlyphListLCD".302* rgbOrder is a jint rather than a jboolean so that this typedef matches303* AnyFunc which is the first element in a union in NativePrimitive's304* initialiser. See the comments alongside declaration of the AnyFunc type for305* a full explanation.306*/307typedef void (DrawGlyphListLCDFunc)(SurfaceDataRasInfo *pRasInfo,308ImageRef *glyphs,309jint totalGlyphs,310jint fgpixel, jint fgcolor,311jint cx1, jint cy1,312jint cx2, jint cy2,313jint rgbOrder,314unsigned char *gammaLut,315unsigned char *invGammaLut,316struct _NativePrimitive *pPrim,317CompositeInfo *pCompInfo);318319/*320* The signature of the inner loop functions for a "TransformHelper".321*/322typedef void (TransformHelperFunc)(SurfaceDataRasInfo *pSrcInfo,323jint *pRGB, jint numpix,324jlong xlong, jlong dxlong,325jlong ylong, jlong dylong);326327typedef struct {328TransformHelperFunc *nnHelper;329TransformHelperFunc *blHelper;330TransformHelperFunc *bcHelper;331} TransformHelperFuncs;332333typedef void (TransformInterpFunc)(jint *pRGBbase, jint numpix,334jint xfract, jint dxfract,335jint yfract, jint dyfract);336337/*338* The signature of the inner loop function for a "FillParallelogram"339* Note that this same inner loop is used for native DrawParallelogram340* primitives.341* Note that these functions are paired with equivalent DrawLine342* inner loop functions to facilitate nicer looking and faster thin343* transformed drawrect calls.344*/345typedef void (FillParallelogramFunc)(SurfaceDataRasInfo *pRasInfo,346jint lox, jint loy, jint hix, jint hiy,347jlong leftx, jlong dleftx,348jlong rightx, jlong drightx,349jint pixel, struct _NativePrimitive *pPrim,350CompositeInfo *pCompInfo);351352typedef struct {353FillParallelogramFunc *fillpgram;354DrawLineFunc *drawline;355} DrawParallelogramFuncs;356357/*358* This structure contains all information for defining a single359* native GraphicsPrimitive, including:360* - The information about the type of the GraphicsPrimitive subclass.361* - The information about the type of the source surface.362* - The information about the type of the compositing operation.363* - The information about the type of the destination surface.364* - A pointer to the function that performs the actual inner loop work.365* - Extra flags needed for locking the source and destination surfaces366* above and beyond the flags specified in the Primitive, Composite367* and SurfaceType structures. (For most native primitives these368* flags can be calculated automatically from information stored in369* the PrimitiveType, SurfaceType, and CompositeType structures.)370*/371typedef struct _NativePrimitive {372PrimitiveType *pPrimType;373SurfaceType *pSrcType;374CompositeType *pCompType;375SurfaceType *pDstType;376/* See declaration of AnyFunc type above for comments explaining why377* only AnyFunc is used by the initializers for these union fields378* and consequent type restrictions.379*/380union {381AnyFunc *initializer;382BlitFunc *blit;383BlitBgFunc *blitbg;384ScaleBlitFunc *scaledblit;385FillRectFunc *fillrect;386FillSpansFunc *fillspans;387FillParallelogramFunc *fillparallelogram;388DrawParallelogramFuncs *drawparallelogram;389DrawLineFunc *drawline;390MaskFillFunc *maskfill;391MaskBlitFunc *maskblit;392DrawGlyphListFunc *drawglyphlist;393DrawGlyphListFunc *drawglyphlistaa;394DrawGlyphListLCDFunc *drawglyphlistlcd;395TransformHelperFuncs *transformhelpers;396} funcs, funcs_c;397jint srcflags;398jint dstflags;399} NativePrimitive;400401/*402* This function should be defined to return a pointer to403* an accelerated version of a primitive function 'func_c'404* if it exists and to return a copy of the input parameter405* otherwise.406*/407extern AnyFunc* MapAccelFunction(AnyFunc *func_c);408409/*410* The global collection of all primitive types. Specific NativePrimitive411* structures can be statically initialized by pointing to these structures.412*/413extern struct _PrimitiveTypes {414PrimitiveType Blit;415PrimitiveType BlitBg;416PrimitiveType ScaledBlit;417PrimitiveType FillRect;418PrimitiveType FillSpans;419PrimitiveType FillParallelogram;420PrimitiveType DrawParallelogram;421PrimitiveType DrawLine;422PrimitiveType DrawRect;423PrimitiveType DrawPolygons;424PrimitiveType DrawPath;425PrimitiveType FillPath;426PrimitiveType MaskBlit;427PrimitiveType MaskFill;428PrimitiveType DrawGlyphList;429PrimitiveType DrawGlyphListAA;430PrimitiveType DrawGlyphListLCD;431PrimitiveType TransformHelper;432} PrimitiveTypes;433434/*435* The global collection of all surface types. Specific NativePrimitive436* structures can be statically initialized by pointing to these structures.437*/438extern struct _SurfaceTypes {439SurfaceType OpaqueColor;440SurfaceType AnyColor;441SurfaceType AnyByte;442SurfaceType ByteBinary1Bit;443SurfaceType ByteBinary2Bit;444SurfaceType ByteBinary4Bit;445SurfaceType ByteIndexed;446SurfaceType ByteIndexedBm;447SurfaceType ByteGray;448SurfaceType Index8Gray;449SurfaceType Index12Gray;450SurfaceType AnyShort;451SurfaceType Ushort555Rgb;452SurfaceType Ushort555Rgbx;453SurfaceType Ushort565Rgb;454SurfaceType Ushort4444Argb;455SurfaceType UshortGray;456SurfaceType UshortIndexed;457SurfaceType Any3Byte;458SurfaceType ThreeByteBgr;459SurfaceType AnyInt;460SurfaceType IntArgb;461SurfaceType IntArgbPre;462SurfaceType IntArgbBm;463SurfaceType IntRgb;464SurfaceType IntBgr;465SurfaceType IntRgbx;466SurfaceType Any4Byte;467SurfaceType FourByteAbgr;468SurfaceType FourByteAbgrPre;469} SurfaceTypes;470471/*472* The global collection of all composite types. Specific NativePrimitive473* structures can be statically initialized by pointing to these structures.474*/475extern struct _CompositeTypes {476CompositeType SrcNoEa;477CompositeType SrcOverNoEa;478CompositeType SrcOverBmNoEa;479CompositeType Src;480CompositeType SrcOver;481CompositeType Xor;482CompositeType AnyAlpha;483} CompositeTypes;484485#define ArraySize(A) (sizeof(A) / sizeof(A[0]))486487#define PtrAddBytes(p, b) ((void *) (((intptr_t) (p)) + (b)))488#define PtrCoord(p, x, xinc, y, yinc) PtrAddBytes(p, \489((ptrdiff_t)(y))*(yinc) + \490((ptrdiff_t)(x))*(xinc))491#define PtrPixelsRow(p, y, scanStride) PtrAddBytes(p, \492((intptr_t) (y)) * (scanStride))493494/*495* The function to call with an array of NativePrimitive structures496* to register them with the Java GraphicsPrimitiveMgr.497*/498extern jboolean RegisterPrimitives(JNIEnv *env,499NativePrimitive *pPrim,500jint NumPrimitives);501502/*503* The utility function to retrieve the NativePrimitive structure504* from a given Java GraphicsPrimitive object.505*/506extern JNIEXPORT NativePrimitive * JNICALL507GetNativePrim(JNIEnv *env, jobject gp);508509/*510* Utility functions to get values from a Java SunGraphics2D or Color object.511*/512extern JNIEXPORT void JNICALL513GrPrim_Sg2dGetCompInfo(JNIEnv *env, jobject sg2d,514NativePrimitive *pPrim,515CompositeInfo *pCompInfo);516extern JNIEXPORT jint JNICALL517GrPrim_CompGetXorColor(JNIEnv *env, jobject comp);518extern JNIEXPORT void JNICALL519GrPrim_CompGetXorInfo(JNIEnv *env, CompositeInfo *pCompInfo, jobject comp);520extern JNIEXPORT void JNICALL521GrPrim_CompGetAlphaInfo(JNIEnv *env, CompositeInfo *pCompInfo, jobject comp);522523extern JNIEXPORT void JNICALL524GrPrim_Sg2dGetClip(JNIEnv *env, jobject sg2d,525SurfaceDataBounds *bounds);526527extern JNIEXPORT jint JNICALL528GrPrim_Sg2dGetPixel(JNIEnv *env, jobject sg2d);529extern JNIEXPORT jint JNICALL530GrPrim_Sg2dGetEaRGB(JNIEnv *env, jobject sg2d);531extern JNIEXPORT jint JNICALL532GrPrim_Sg2dGetLCDTextContrast(JNIEnv *env, jobject sg2d);533534/*535* Data structure and functions to retrieve and use536* AffineTransform objects from the native level.537*/538typedef struct {539jdouble dxdx; /* dx in dest space for each dx in src space */540jdouble dxdy; /* dx in dest space for each dy in src space */541jdouble tx;542jdouble dydx; /* dy in dest space for each dx in src space */543jdouble dydy; /* dy in dest space for each dy in src space */544jdouble ty;545} TransformInfo;546547extern JNIEXPORT void JNICALL548Transform_GetInfo(JNIEnv *env, jobject txform, TransformInfo *pTxInfo);549extern JNIEXPORT void JNICALL550Transform_transform(TransformInfo *pTxInfo, jdouble *pX, jdouble *pY);551552void GrPrim_RefineBounds(SurfaceDataBounds *bounds, jint transX, jint transY,553jfloat *coords, jint maxCoords);554555extern jfieldID path2DTypesID;556extern jfieldID path2DNumTypesID;557extern jfieldID path2DWindingRuleID;558extern jfieldID path2DFloatCoordsID;559extern jfieldID sg2dStrokeHintID;560extern jint sunHints_INTVAL_STROKE_PURE;561562/*563* Macros for using jlong variables as 32bits.32bits fractional values564*/565#define LongOneHalf (((jlong) 1) << 31)566#define IntToLong(i) (((jlong) (i)) << 32)567#define DblToLong(d) ((jlong) ((d) * IntToLong(1)))568#define LongToDbl(l) (((jdouble) l) / IntToLong(1))569#define WholeOfLong(l) ((jint) ((l) >> 32))570#define FractOfLong(l) ((jint) (l))571#define URShift(i, n) (((juint) (i)) >> (n))572573/*574* Macros to help in defining arrays of NativePrimitive structures.575*576* These macros are the very base macros. More specific macros are577* defined in LoopMacros.h.578*579* Note that the DrawLine, DrawRect, and DrawPolygons primitives are580* all registered together from a single shared native function pointer.581*/582583#define REGISTER_PRIMITIVE(TYPE, SRC, COMP, DST, FUNC) \584{ \585& PrimitiveTypes.TYPE, \586& SurfaceTypes.SRC, \587& CompositeTypes.COMP, \588& SurfaceTypes.DST, \589{FUNC}, \590{FUNC}, \5910, \5920 \593}594595#define REGISTER_PRIMITIVE_FLAGS(TYPE, SRC, COMP, DST, FUNC, SFLAGS, DFLAGS) \596{ \597& PrimitiveTypes.TYPE, \598& SurfaceTypes.SRC, \599& CompositeTypes.COMP, \600& SurfaceTypes.DST, \601{FUNC}, \602{FUNC}, \603SFLAGS, \604DFLAGS, \605}606607#define REGISTER_BLIT(SRC, COMP, DST, FUNC) \608REGISTER_PRIMITIVE(Blit, SRC, COMP, DST, FUNC)609610#define REGISTER_BLIT_FLAGS(SRC, COMP, DST, FUNC, SFLAGS, DFLAGS) \611REGISTER_PRIMITIVE_FLAGS(Blit, SRC, COMP, DST, FUNC, SFLAGS, DFLAGS)612613#define REGISTER_SCALEBLIT(SRC, COMP, DST, FUNC) \614REGISTER_PRIMITIVE(ScaledBlit, SRC, COMP, DST, FUNC)615616#define REGISTER_SCALEBLIT_FLAGS(SRC, COMP, DST, FUNC, SFLAGS, DFLAGS) \617REGISTER_PRIMITIVE_FLAGS(ScaledBlit, SRC, COMP, DST, FUNC, SFLAGS, DFLAGS)618619#define REGISTER_BLITBG(SRC, COMP, DST, FUNC) \620REGISTER_PRIMITIVE(BlitBg, SRC, COMP, DST, FUNC)621622#define REGISTER_FILLRECT(SRC, COMP, DST, FUNC) \623REGISTER_PRIMITIVE(FillRect, SRC, COMP, DST, FUNC)624625#define REGISTER_FILLSPANS(SRC, COMP, DST, FUNC) \626REGISTER_PRIMITIVE(FillSpans, SRC, COMP, DST, FUNC)627628#define REGISTER_FILLPGRAM(SRC, COMP, DST, FUNC) \629REGISTER_PRIMITIVE(FillParallelogram, SRC, COMP, DST, FUNC), \630REGISTER_PRIMITIVE(DrawParallelogram, SRC, COMP, DST, FUNC)631632#define REGISTER_LINE_PRIMITIVES(SRC, COMP, DST, FUNC) \633REGISTER_PRIMITIVE(DrawLine, SRC, COMP, DST, FUNC), \634REGISTER_PRIMITIVE(DrawRect, SRC, COMP, DST, FUNC), \635REGISTER_PRIMITIVE(DrawPolygons, SRC, COMP, DST, FUNC), \636REGISTER_PRIMITIVE(DrawPath, SRC, COMP, DST, FUNC), \637REGISTER_PRIMITIVE(FillPath, SRC, COMP, DST, FUNC)638639#define REGISTER_MASKBLIT(SRC, COMP, DST, FUNC) \640REGISTER_PRIMITIVE(MaskBlit, SRC, COMP, DST, FUNC)641642#define REGISTER_MASKFILL(SRC, COMP, DST, FUNC) \643REGISTER_PRIMITIVE(MaskFill, SRC, COMP, DST, FUNC)644645#define REGISTER_DRAWGLYPHLIST(SRC, COMP, DST, FUNC) \646REGISTER_PRIMITIVE(DrawGlyphList, SRC, COMP, DST, FUNC)647648#define REGISTER_DRAWGLYPHLISTAA(SRC, COMP, DST, FUNC) \649REGISTER_PRIMITIVE(DrawGlyphListAA, SRC, COMP, DST, FUNC)650651#define REGISTER_DRAWGLYPHLISTLCD(SRC, COMP, DST, FUNC) \652REGISTER_PRIMITIVE(DrawGlyphListLCD, SRC, COMP, DST, FUNC)653654#ifdef __cplusplus655};656#endif657658#endif /* GraphicsPrimitiveMgr_h_Included */659660661