blob: 7786bda38290abf0c0e4a5e3e604a24de4aed108 [file] [log] [blame]
/*
* Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#ifndef UshortIndexed_h_Included
#define UshortIndexed_h_Included
#include "IntDcm.h"
#include "ByteIndexed.h"
/*
* This file contains macro and type definitions used by the macros in
* LoopMacros.h to manipulate a surface of type "UshortIndexed".
*/
typedef jushort UshortIndexedPixelType;
typedef jushort UshortIndexedDataType;
#define UshortIndexedPixelStride 2
/*
* Note that even though the type is called UshortIndex it is
* really only used as 12-bit indexed (per the BitsPerPixel
* define), thus we need to mask 12 bits of the index into Lut.
*/
#define UshortIndexedBitsPerPixel 12
#define UshortIndexedLutMask 0xfff
#define DeclareUshortIndexedLoadVars(PREFIX) \
jint *PREFIX ## Lut;
#define DeclareUshortIndexedStoreVars(PREFIX) \
int PREFIX ## XDither, PREFIX ## YDither; \
char *PREFIX ## rerr, *PREFIX ## gerr, *PREFIX ## berr; \
unsigned char *PREFIX ## InvLut;
#define SetUshortIndexedStoreVarsYPos(PREFIX, pRasInfo, LOC) \
do { \
PREFIX ## YDither = ((LOC & 7) << 3); \
} while (0)
#define SetUshortIndexedStoreVarsXPos(PREFIX, pRasInfo, LOC) \
do { \
PREFIX ## rerr = (pRasInfo)->redErrTable + PREFIX ## YDither; \
PREFIX ## gerr = (pRasInfo)->grnErrTable + PREFIX ## YDither; \
PREFIX ## berr = (pRasInfo)->bluErrTable + PREFIX ## YDither; \
PREFIX ## XDither = (LOC & 7); \
} while (0)
#define InitUshortIndexedLoadVars(PREFIX, pRasInfo) \
PREFIX ## Lut = (pRasInfo)->lutBase
/* REMIND Could collapse Init..Store..X and Init..Store..Y into one Init
* and factor out the Set.. macros.
*/
#define InitUshortIndexedStoreVarsY(PREFIX, pRasInfo) \
do { \
SetUshortIndexedStoreVarsYPos(PREFIX, pRasInfo, (pRasInfo)->bounds.y1); \
PREFIX ## InvLut = (pRasInfo)->invColorTable; \
} while (0)
#define InitUshortIndexedStoreVarsX(PREFIX, pRasInfo) \
SetUshortIndexedStoreVarsXPos(PREFIX, pRasInfo, (pRasInfo)->bounds.x1);
#define NextUshortIndexedStoreVarsX(PREFIX) \
PREFIX ## XDither = (PREFIX ## XDither + 1) & 7
#define NextUshortIndexedStoreVarsY(PREFIX) \
PREFIX ## YDither = (PREFIX ## YDither + (1 << 3)) & (7 << 3)
typedef jushort UshortIndexedBmPixelType;
typedef jushort UshortIndexedBmDataType;
#define UshortIndexedBmPixelStride 2
#define UshortIndexedBmBitsPerPixel 12
#define DeclareUshortIndexedBmLoadVars DeclareUshortIndexedLoadVars
#define DeclareUshortIndexedBmStoreVars DeclareUshortIndexedStoreVars
#define InitUshortIndexedBmLoadVars InitUshortIndexedLoadVars
#define InitUshortIndexedBmStoreVarsY InitUshortIndexedStoreVarsY
#define InitUshortIndexedBmStoreVarsX InitUshortIndexedStoreVarsX
#define NextUshortIndexedBmStoreVarsX NextUshortIndexedStoreVarsX
#define NextUshortIndexedBmStoreVarsY NextUshortIndexedStoreVarsY
#define UshortIndexedXparLutEntry -1
#define UshortIndexedIsXparLutEntry(pix) (pix < 0)
#define StoreUshortIndexedNonXparFromArgb StoreUshortIndexedFrom1IntArgb
#define StoreUshortIndexedPixel(pRas, x, pixel) \
((pRas)[x] = (jushort) (pixel))
#define DeclareUshortIndexedPixelData(PREFIX)
#define ExtractUshortIndexedPixelData(PIXEL, PREFIX)
#define StoreUshortIndexedPixelData(pPix, x, pixel, PREFIX) \
(pPix)[x] = (jushort) (pixel)
#define UshortIndexedPixelFromArgb(pixel, rgb, pRasInfo) \
do { \
jint r, g, b; \
ExtractIntDcmComponentsX123(rgb, r, g, b); \
(pixel) = SurfaceData_InvColorMap((pRasInfo)->invColorTable, \
r, g, b); \
} while (0)
#define LoadUshortIndexedTo1IntRgb(pRas, PREFIX, x, rgb) \
(rgb) = PREFIX ## Lut[(pRas[x])&UshortIndexedLutMask];
#define LoadUshortIndexedTo1IntArgb(pRas, PREFIX, x, argb) \
(argb) = PREFIX ## Lut[(pRas[x])&UshortIndexedLutMask];
#define LoadUshortIndexedTo3ByteRgb(pRas, PREFIX, x, r, g, b) \
do { \
jint rgb = PREFIX ## Lut[(pRas[x])&UshortIndexedLutMask]; \
ExtractIntDcmComponentsX123(rgb, r, g, b); \
} while (0)
#define LoadUshortIndexedTo4ByteArgb(pRas, PREFIX, x, a, r, g, b) \
do { \
jint argb = PREFIX ## Lut[(pRas[x])&UshortIndexedLutMask]; \
ExtractIntDcmComponents1234(argb, a, r, g, b); \
} while (0)
#define StoreUshortIndexedFrom1IntRgb(pRas, PREFIX, x, rgb) \
do { \
int r, g, b; \
ExtractIntDcmComponentsX123(rgb, r, g, b); \
StoreUshortIndexedFrom3ByteRgb(pRas, PREFIX, x, r, g, b); \
} while (0)
#define StoreUshortIndexedFrom1IntArgb(pRas, PREFIX, x, argb) \
StoreUshortIndexedFrom1IntRgb(pRas, PREFIX, x, argb)
#define StoreUshortIndexedFrom3ByteRgb(pRas, PREFIX, x, r, g, b) \
do { \
r += PREFIX ## rerr[PREFIX ## XDither]; \
g += PREFIX ## gerr[PREFIX ## XDither]; \
b += PREFIX ## berr[PREFIX ## XDither]; \
ByteClamp3Components(r, g, b); \
(pRas)[x] = SurfaceData_InvColorMap(PREFIX ## InvLut, r, g, b); \
} while (0)
#define StoreUshortIndexedFrom4ByteArgb(pRas, PREFIX, x, a, r, g, b) \
StoreUshortIndexedFrom3ByteRgb(pRas, PREFIX, x, r, g, b)
#define DeclareUshortIndexedAlphaLoadData(PREFIX) \
jint *PREFIX ## Lut; \
jint PREFIX ## rgb;
#define InitUshortIndexedAlphaLoadData(PREFIX, pRasInfo) \
PREFIX ## Lut = (pRasInfo)->lutBase
#define LoadAlphaFromUshortIndexedFor4ByteArgb(pRas, PREFIX, COMP_PREFIX) \
do { \
PREFIX ## rgb = PREFIX ## Lut[((pRas)[0])&UshortIndexedLutMask]; \
COMP_PREFIX ## A = ((juint) PREFIX ## rgb) >> 24; \
} while (0)
#define Postload4ByteArgbFromUshortIndexed(pRas, PREFIX, COMP_PREFIX) \
do { \
COMP_PREFIX ## R = (PREFIX ## rgb >> 16) & 0xff; \
COMP_PREFIX ## G = (PREFIX ## rgb >> 8) & 0xff; \
COMP_PREFIX ## B = (PREFIX ## rgb >> 0) & 0xff; \
} while (0)
#define UshortIndexedIsPremultiplied 0
#define StoreUshortIndexedFrom4ByteArgbComps(pRas, PREFIX, x, COMP_PREFIX) \
StoreUshortIndexedFrom4ByteArgb(pRas, PREFIX, x, \
COMP_PREFIX ## A, COMP_PREFIX ## R, \
COMP_PREFIX ## G, COMP_PREFIX ## B)
#endif /* UshortIndexed_h_Included */