0N/A/*
2362N/A * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/A#ifndef AlphaMath_h_Included
0N/A#define AlphaMath_h_Included
0N/A
0N/Aextern unsigned char mul8table[256][256];
0N/Aextern unsigned char div8table[256][256];
0N/Aextern void initAlphaTables();
0N/A
0N/A
0N/A/*
0N/A * Multiply and Divide macros for single byte (8-bit) quantities representing
0N/A * the values 0.0 to 1.0 as 0x00 to 0xff.
0N/A * MUL8 multiplies its operands together
0N/A * DIV8 divides the first operand by the second, clipping to 0xff
0N/A * (Note that since the divisor for DIV8 is likely to be
0N/A * the alpha quantity which is likely to be the same for
0N/A * multiple adjacent invocations, the table is designed
0N/A * with the first index being the divisor to hopefully
0N/A * improve memory cache hits...)
0N/A */
0N/A#define MUL8(a,b) mul8table[a][b]
0N/A#define DIV8(a,b) div8table[b][a]
0N/A
0N/A/*
0N/A * Multiply and Divide macros for operations involving a single short (16-bit)
0N/A * quantity and a single byte (8-bit) quantity. Typically, promoting the
0N/A * 8-bit value to 16 bits would lead to overflow when the operation occurs.
0N/A * These macros have been modified somewhat so that overflow will not occur.
0N/A * MUL8_16 multiplies an 8-bit value by a 16-bit value (the order of operands
0N/A * is unimportant since multiplication is a commutative operation)
0N/A * DIV16_8 divides the first (16-bit) operand by the second (8-bit) value
0N/A */
0N/A
0N/A#define MUL8_16(a,b) (((a) * (b)) / 255)
0N/A#define DIV16_8(a,b) (((a) * 255) / (b))
0N/A
0N/A/*
0N/A * Multiply and Divide macros for single short (16-bit) quantities
0N/A * representing the values 0.0 to 1.0 as 0x0000 to 0xffff.
0N/A * MUL16 multiplies its operands using the standard multiplication operator
0N/A * and normalizes the result to the appropriate range
0N/A * DIV16 divides the first operand by the second and normalizes the result
0N/A * to a 16-bit value
0N/A */
0N/A#define MUL16(a,b) (((a) * (b)) / 65535)
0N/A#define DIV16(a,b) (((a) * 65535) / (b))
0N/A
0N/A/*
0N/A * Macro for the sum of two normalized (16-bit) products. Refer to the
0N/A * following equation and note that the right side reduces the number of
0N/A * divide operations in the left side and increases the precision of the
0N/A * result:
0N/A * a*f1 + b*f2 a*f1 + b*f2
0N/A * ---- ---- = ----------- (where n in this case will be 65535)
0N/A * n n n
0N/A */
0N/A#define AddNormalizedProducts16(a, f1, b, f2) \
0N/A ((((a) * (f1)) + ((b) * (f2))) / 65535)
0N/A
0N/A
0N/A/*
0N/A * The following macros help to generalize the MaskBlit and MaskFill loops
0N/A * found in AlphaMacros.h. The appropriate macros will be used based on the
0N/A * strategy of the given loop. The strategy types take the form:
0N/A * <number of components per pixel><component data type><colorspace>
0N/A * For example, these are the current strategy types:
0N/A * 3ByteRgb (currently only used as a glyph list blending strategy where
0N/A * the alpha value itself is neither blended nor stored)
0N/A * 4ByteArgb (eg. IntArgb, ThreeByteBgr, Ushort555Rgb, ByteIndexed, etc.)
0N/A * 4ShortArgb (not used currently; could be used when surface types using
0N/A * 16 bits per component are implemented)
0N/A * 1ByteGray (eg. ByteGray)
0N/A * 1ShortGray (eg. UshortGray)
0N/A * Note that the macros which operate on alpha values have the word "Alpha"
0N/A * somewhere in their name. Those macros that only operate on the color/gray
0N/A * components of a given strategy will have the word "Components" or "Comps"
0N/A * in their name.
0N/A */
0N/A
0N/A
0N/A/*
0N/A * MaxValFor ## STRATEGY
0N/A */
0N/A#define MaxValFor4ByteArgb 0xff
0N/A#define MaxValFor1ByteGray 0xff
0N/A#define MaxValFor1ShortGray 0xffff
0N/A
0N/A
0N/A/*
0N/A * AlphaType ## STRATEGY
0N/A */
0N/A#define AlphaType3ByteRgb jint
0N/A#define AlphaType4ByteArgb jint
0N/A#define AlphaType1ByteGray jint
0N/A#define AlphaType1ShortGray juint
0N/A
0N/A
0N/A/*
0N/A * ComponentType ## STRATEGY
0N/A */
0N/A#define ComponentType3ByteRgb jint
0N/A#define ComponentType4ByteArgb jint
0N/A#define ComponentType1ByteGray jint
0N/A#define ComponentType1ShortGray juint
0N/A
0N/A
0N/A/*
0N/A * DeclareAlphaVarFor ## STRATEGY(VAR)
0N/A *
0N/A * jint a;
0N/A */
0N/A#define DeclareAlphaVarFor3ByteRgb(VAR) \
0N/A AlphaType3ByteRgb VAR;
0N/A
0N/A#define DeclareAlphaVarFor4ByteArgb(VAR) \
0N/A AlphaType4ByteArgb VAR;
0N/A
0N/A#define DeclareAlphaVarFor1ByteGray(VAR) \
0N/A AlphaType1ByteGray VAR;
0N/A
0N/A#define DeclareAlphaVarFor1ShortGray(VAR) \
0N/A AlphaType1ShortGray VAR;
0N/A
0N/A
0N/A/*
0N/A * DeclareAndInitAlphaVarFor ## STRATEGY(VAR, initval)
0N/A *
0N/A * jint a = initval;
0N/A */
0N/A#define DeclareAndInitAlphaVarFor4ByteArgb(VAR, initval) \
0N/A AlphaType4ByteArgb VAR = initval;
0N/A
0N/A#define DeclareAndInitAlphaVarFor1ByteGray(VAR, initval) \
0N/A AlphaType1ByteGray VAR = initval;
0N/A
0N/A#define DeclareAndInitAlphaVarFor1ShortGray(VAR, initval) \
0N/A AlphaType1ShortGray VAR = initval;
0N/A
0N/A
0N/A/*
0N/A * DeclareAndClearAlphaVarFor ## STRATEGY(VAR)
0N/A *
0N/A * jint a = 0;
0N/A */
0N/A#define DeclareAndClearAlphaVarFor4ByteArgb(VAR) \
0N/A DeclareAndInitAlphaVarFor4ByteArgb(VAR, 0)
0N/A
0N/A#define DeclareAndClearAlphaVarFor1ByteGray(VAR) \
0N/A DeclareAndInitAlphaVarFor1ByteGray(VAR, 0)
0N/A
0N/A#define DeclareAndClearAlphaVarFor1ShortGray(VAR) \
0N/A DeclareAndInitAlphaVarFor1ShortGray(VAR, 0)
0N/A
0N/A
0N/A/*
0N/A * DeclareAndSetOpaqueAlphaVarFor ## STRATEGY(VAR)
0N/A *
0N/A * jint a = 0xff;
0N/A */
0N/A#define DeclareAndSetOpaqueAlphaVarFor4ByteArgb(VAR) \
0N/A DeclareAndInitAlphaVarFor4ByteArgb(VAR, MaxValFor4ByteArgb)
0N/A
0N/A#define DeclareAndSetOpaqueAlphaVarFor1ByteGray(VAR) \
0N/A DeclareAndInitAlphaVarFor1ByteGray(VAR, MaxValFor1ByteGray)
0N/A
0N/A#define DeclareAndSetOpaqueAlphaVarFor1ShortGray(VAR) \
0N/A DeclareAndInitAlphaVarFor1ShortGray(VAR, MaxValFor1ShortGray)
0N/A
0N/A
0N/A/*
0N/A * DeclareAndInvertAlphaVarFor ## STRATEGY(VAR, invalpha)
0N/A *
0N/A * jint a = 0xff - resA;
0N/A */
0N/A#define DeclareAndInvertAlphaVarFor4ByteArgb(VAR, invalpha) \
0N/A DeclareAndInitAlphaVarFor4ByteArgb(VAR, MaxValFor4ByteArgb - invalpha)
0N/A
0N/A#define DeclareAndInvertAlphaVarFor1ByteGray(VAR, invalpha) \
0N/A DeclareAndInitAlphaVarFor1ByteGray(VAR, MaxValFor1ByteGray - invalpha)
0N/A
0N/A#define DeclareAndInvertAlphaVarFor1ShortGray(VAR, invalpha) \
0N/A DeclareAndInitAlphaVarFor1ShortGray(VAR, MaxValFor1ShortGray - invalpha)
0N/A
0N/A
0N/A/*
0N/A * DeclareCompVarsFor ## STRATEGY(PREFIX)
0N/A *
0N/A * jint c;
0N/A */
0N/A#define DeclareCompVarsFor3ByteRgb(PREFIX) \
0N/A ComponentType3ByteRgb PREFIX ## R, PREFIX ## G, PREFIX ## B;
0N/A
0N/A#define DeclareCompVarsFor4ByteArgb(PREFIX) \
0N/A ComponentType4ByteArgb PREFIX ## R, PREFIX ## G, PREFIX ## B;
0N/A
0N/A#define DeclareCompVarsFor1ByteGray(PREFIX) \
0N/A ComponentType1ByteGray PREFIX ## G;
0N/A
0N/A#define DeclareCompVarsFor1ShortGray(PREFIX) \
0N/A ComponentType1ShortGray PREFIX ## G;
0N/A
0N/A
0N/A/*
0N/A * DeclareAndInitExtraAlphaFor ## STRATEGY(VAR)
0N/A *
0N/A * jint extraA = (int)(pCompInfo->details.extraAlpha * 255.0 + 0.5);
0N/A */
0N/A#define DeclareAndInitExtraAlphaFor4ByteArgb(VAR) \
0N/A AlphaType4ByteArgb VAR = \
0N/A (AlphaType4ByteArgb)(pCompInfo->details.extraAlpha * 255.0 + 0.5);
0N/A
0N/A#define DeclareAndInitExtraAlphaFor1ByteGray(VAR) \
0N/A AlphaType1ByteGray VAR = \
0N/A (AlphaType1ByteGray)(pCompInfo->details.extraAlpha * 255.0 + 0.5);
0N/A
0N/A#define DeclareAndInitExtraAlphaFor1ShortGray(VAR) \
0N/A AlphaType1ShortGray VAR = \
0N/A (AlphaType1ShortGray)(pCompInfo->details.extraAlpha * 65535.0 + 0.5);
0N/A
0N/A
0N/A/*
0N/A * PromoteByteAlphaFor ## STRATEGY(a)
0N/A */
0N/A#define PromoteByteAlphaFor4ByteArgb(a)
0N/A#define PromoteByteAlphaFor1ByteGray(a)
0N/A#define PromoteByteAlphaFor1ShortGray(a) \
0N/A (a) = (((a) << 8) + (a))
0N/A
0N/A
0N/A/*
0N/A * DeclareAndInitPathAlphaFor ## STRATEGY(VAR)
0N/A *
0N/A * jint pathA = *pMask++;
0N/A */
0N/A#define DeclareAndInitPathAlphaFor4ByteArgb(VAR) \
0N/A AlphaType4ByteArgb VAR = *pMask++;
0N/A
0N/A#define DeclareAndInitPathAlphaFor1ByteGray(VAR) \
0N/A AlphaType1ByteGray VAR = *pMask++;
0N/A
0N/A#define DeclareAndInitPathAlphaFor1ShortGray(VAR) \
0N/A AlphaType1ShortGray VAR = *pMask++;
0N/A
0N/A
0N/A/*
0N/A * MultiplyAlphaFor ## STRATEGY(a, b)
0N/A *
0N/A * a * b
0N/A */
0N/A#define MultiplyAlphaFor4ByteArgb(a, b) \
0N/A MUL8(a, b)
0N/A
0N/A#define MultiplyAlphaFor1ByteGray(a, b) \
0N/A MUL8(a, b)
0N/A
0N/A#define MultiplyAlphaFor1ShortGray(a, b) \
0N/A MUL16(a, b)
0N/A
0N/A
0N/A/*
0N/A * MultiplyAndStore ## STRATEGY ## Comps(PROD_PREFIX, M1, M2_PREFIX)
0N/A *
0N/A * c = m1 * m2;
0N/A */
0N/A#define MultiplyAndStore3Components(PROD_PREFIX, M1, M2_PREFIX, PRECISION) \
0N/A do { \
0N/A PROD_PREFIX ## R = MUL ## PRECISION(M1, M2_PREFIX ## R); \
0N/A PROD_PREFIX ## G = MUL ## PRECISION(M1, M2_PREFIX ## G); \
0N/A PROD_PREFIX ## B = MUL ## PRECISION(M1, M2_PREFIX ## B); \
0N/A } while (0)
0N/A
0N/A#define MultiplyAndStore1Component(PROD_PREFIX, M1, M2_PREFIX, PRECISION) \
0N/A PROD_PREFIX ## G = MUL ## PRECISION(M1, M2_PREFIX ## G)
0N/A
0N/A#define MultiplyAndStore4ByteArgbComps(PROD_PREFIX, M1, M2_PREFIX) \
0N/A MultiplyAndStore3Components(PROD_PREFIX, M1, M2_PREFIX, 8)
0N/A
0N/A#define MultiplyAndStore1ByteGrayComps(PROD_PREFIX, M1, M2_PREFIX) \
0N/A MultiplyAndStore1Component(PROD_PREFIX, M1, M2_PREFIX, 8)
0N/A
0N/A#define MultiplyAndStore1ShortGrayComps(PROD_PREFIX, M1, M2_PREFIX) \
0N/A MultiplyAndStore1Component(PROD_PREFIX, M1, M2_PREFIX, 16)
0N/A
0N/A
0N/A/*
0N/A * DivideAndStore ## STRATEGY ## Comps(QUOT_PREFIX, D1_PREFIX, D2)
0N/A *
0N/A * c = d1 / d2;
0N/A */
0N/A#define DivideAndStore3Components(QUOT_PREFIX, D1_PREFIX, D2, PRECISION) \
0N/A do { \
0N/A QUOT_PREFIX ## R = DIV ## PRECISION(D1_PREFIX ## R, D2); \
0N/A QUOT_PREFIX ## G = DIV ## PRECISION(D1_PREFIX ## G, D2); \
0N/A QUOT_PREFIX ## B = DIV ## PRECISION(D1_PREFIX ## B, D2); \
0N/A } while (0)
0N/A
0N/A#define DivideAndStore1Component(QUOT_PREFIX, D1_PREFIX, D2, PRECISION) \
0N/A QUOT_PREFIX ## G = DIV ## PRECISION(D1_PREFIX ## G, D2)
0N/A
0N/A#define DivideAndStore4ByteArgbComps(QUOT_PREFIX, D1_PREFIX, D2) \
0N/A DivideAndStore3Components(QUOT_PREFIX, D1_PREFIX, D2, 8)
0N/A
0N/A#define DivideAndStore1ByteGrayComps(QUOT_PREFIX, D1_PREFIX, D2) \
0N/A DivideAndStore1Component(QUOT_PREFIX, D1_PREFIX, D2, 8)
0N/A
0N/A#define DivideAndStore1ShortGrayComps(QUOT_PREFIX, D1_PREFIX, D2) \
0N/A DivideAndStore1Component(QUOT_PREFIX, D1_PREFIX, D2, 16)
0N/A
0N/A
0N/A/*
0N/A * MultiplyAddAndStore ## STRATEGY ## Comps(RES_PREFIX, M1, \
0N/A * M2_PREFIX, A_PREFIX)
0N/A *
0N/A * c = (m1 * m2) + a;
0N/A */
0N/A#define MultiplyAddAndStore3Components(RES_PREFIX, M1, M2_PREFIX, A_PREFIX, \
0N/A PRECISION) \
0N/A do { \
0N/A RES_PREFIX ## R = MUL ## PRECISION(M1, M2_PREFIX ## R) + \
0N/A A_PREFIX ## R; \
0N/A RES_PREFIX ## G = MUL ## PRECISION(M1, M2_PREFIX ## G) + \
0N/A A_PREFIX ## G; \
0N/A RES_PREFIX ## B = MUL ## PRECISION(M1, M2_PREFIX ## B) + \
0N/A A_PREFIX ## B; \
0N/A } while (0)
0N/A
0N/A#define MultiplyAddAndStore1Component(RES_PREFIX, M1, M2_PREFIX, A_PREFIX, \
0N/A PRECISION) \
0N/A RES_PREFIX ## G = MUL ## PRECISION(M1, M2_PREFIX ## G) + A_PREFIX ## G
0N/A
0N/A#define MultiplyAddAndStore4ByteArgbComps(RES_PREFIX, M1, M2_PREFIX, \
0N/A A_PREFIX) \
0N/A MultiplyAddAndStore3Components(RES_PREFIX, M1, M2_PREFIX, A_PREFIX, 8)
0N/A
0N/A#define MultiplyAddAndStore1ByteGrayComps(RES_PREFIX, M1, M2_PREFIX, \
0N/A A_PREFIX) \
0N/A MultiplyAddAndStore1Component(RES_PREFIX, M1, M2_PREFIX, A_PREFIX, 8)
0N/A
0N/A#define MultiplyAddAndStore1ShortGrayComps(RES_PREFIX, M1, M2_PREFIX, \
0N/A A_PREFIX) \
0N/A MultiplyAddAndStore1Component(RES_PREFIX, M1, M2_PREFIX, A_PREFIX, 16)
0N/A
0N/A
0N/A/*
0N/A * MultMultAddAndStore ## STRATEGY ## Comps(RES_PREFIX, M1, M2_PREFIX, \
0N/A * M3, M4_PREFIX)
0N/A *
0N/A * c = (m1 * m2) + (m3 * m4);
0N/A */
0N/A#define MultMultAddAndStore3Components(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX, PRECISION) \
0N/A do { \
0N/A RES_PREFIX ## R = MUL ## PRECISION(M1, M2_PREFIX ## R) + \
0N/A MUL ## PRECISION(M3, M4_PREFIX ## R); \
0N/A RES_PREFIX ## G = MUL ## PRECISION(M1, M2_PREFIX ## G) + \
0N/A MUL ## PRECISION(M3, M4_PREFIX ## G); \
0N/A RES_PREFIX ## B = MUL ## PRECISION(M1, M2_PREFIX ## B) + \
0N/A MUL ## PRECISION(M3, M4_PREFIX ## B); \
0N/A } while (0)
0N/A
0N/A
0N/A#define MultMultAddAndStoreLCD3Components(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX, PRECISION) \
0N/A do { \
0N/A RES_PREFIX ## R = MUL ## PRECISION(M1 ## R, M2_PREFIX ## R) + \
0N/A MUL ## PRECISION(M3 ## R, M4_PREFIX ## R); \
0N/A RES_PREFIX ## G = MUL ## PRECISION(M1 ## G, M2_PREFIX ## G) + \
0N/A MUL ## PRECISION(M3 ## G, M4_PREFIX ## G); \
0N/A RES_PREFIX ## B = MUL ## PRECISION(M1 ## B, M2_PREFIX ## B) + \
0N/A MUL ## PRECISION(M3 ## B, M4_PREFIX ## B); \
0N/A } while (0)
0N/A
0N/A#define MultMultAddAndStore1Component(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX, PRECISION) \
0N/A RES_PREFIX ## G = MUL ## PRECISION(M1, M2_PREFIX ## G) + \
0N/A MUL ## PRECISION(M3, M4_PREFIX ## G)
0N/A
0N/A#define MultMultAddAndStore3ByteRgbComps(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX) \
0N/A MultMultAddAndStore3Components(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX, 8)
0N/A
0N/A#define MultMultAddAndStoreLCD3ByteRgbComps(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX) \
0N/A MultMultAddAndStoreLCD3Components(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX, 8)
0N/A
0N/A#define MultMultAddAndStore4ByteArgbComps(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX) \
0N/A MultMultAddAndStore3Components(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX, 8)
0N/A
0N/A#define MultMultAddAndStoreLCD4ByteArgbComps(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX) \
0N/A MultMultAddAndStoreLCD3Components(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX, 8)
0N/A
0N/A#define MultMultAddAndStore1ByteGrayComps(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX) \
0N/A MultMultAddAndStore1Component(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX, 8)
0N/A
0N/A#define MultMultAddAndStore1ShortGrayComps(RES_PREFIX, M1, M2_PREFIX, \
0N/A M3, M4_PREFIX) \
0N/A RES_PREFIX ## G = AddNormalizedProducts16(M1, M2_PREFIX ## G, \
0N/A M3, M4_PREFIX ## G)
0N/A
0N/A
0N/A/*
0N/A * Store ## STRATEGY ## CompsUsingOp(L_PREFIX, OP, R_PREFIX)
0N/A *
0N/A * l op r; // where op can be something like = or +=
0N/A */
0N/A#define Store3ComponentsUsingOp(L_PREFIX, OP, R_PREFIX) \
0N/A do { \
0N/A L_PREFIX ## R OP R_PREFIX ## R; \
0N/A L_PREFIX ## G OP R_PREFIX ## G; \
0N/A L_PREFIX ## B OP R_PREFIX ## B; \
0N/A } while (0)
0N/A
0N/A#define Store1ComponentUsingOp(L_PREFIX, OP, R_PREFIX) \
0N/A L_PREFIX ## G OP R_PREFIX ## G
0N/A
0N/A#define Store4ByteArgbCompsUsingOp(L_PREFIX, OP, R_PREFIX) \
0N/A Store3ComponentsUsingOp(L_PREFIX, OP, R_PREFIX)
0N/A
0N/A#define Store1ByteGrayCompsUsingOp(L_PREFIX, OP, R_PREFIX) \
0N/A Store1ComponentUsingOp(L_PREFIX, OP, R_PREFIX)
0N/A
0N/A#define Store1ShortGrayCompsUsingOp(L_PREFIX, OP, R_PREFIX) \
0N/A Store1ComponentUsingOp(L_PREFIX, OP, R_PREFIX)
0N/A
0N/A
0N/A/*
0N/A * Set ## STRATEGY ## CompsToZero(PREFIX)
0N/A *
0N/A * c = 0;
0N/A */
0N/A#define Set4ByteArgbCompsToZero(PREFIX) \
0N/A PREFIX ## R = PREFIX ## G = PREFIX ## B = 0
0N/A
0N/A#define Set1ByteGrayCompsToZero(PREFIX) \
0N/A PREFIX ## G = 0
0N/A
0N/A#define Set1ShortGrayCompsToZero(PREFIX) \
0N/A PREFIX ## G = 0
0N/A
0N/A#endif /* AlphaMath_h_Included */