0N/A/*
2362N/A * Copyright (c) 2003, 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#if !defined(JAVA2D_NO_MLIB) || defined(MLIB_ADD_SUFF)
0N/A
0N/A#include <vis_proto.h>
0N/A#include "java2d_Mlib.h"
0N/A
0N/A/***************************************************************/
0N/A
0N/A#define SET_PIX(index, chan) \
0N/A pPix[chan] = pix##chan
0N/A
0N/A#define XOR_PIX(index, chan) \
0N/A pPix[chan] ^= pix##chan
0N/A
0N/A/***************************************************************/
0N/A
0N/A#define EXTRA_1(FUNC, ANYTYPE, NCHAN, DO_PIX)
0N/A#define EXTRA_3(FUNC, ANYTYPE, NCHAN, DO_PIX)
0N/A#define EXTRA_4(FUNC, ANYTYPE, NCHAN, DO_PIX) \
0N/A if ((((jint)pPix | scan) & 3) == 0) { \
0N/A mlib_s32 s_pixel = pixel, r_pixel; \
0N/A *(mlib_f32*)&r_pixel = vis_ldfa_ASI_PL(&s_pixel); \
0N/A ADD_SUFF(AnyInt##FUNC)(pRasInfo, x1, y1, r_pixel, steps, error, \
0N/A bumpmajormask, errmajor, bumpminormask, \
0N/A errminor, pPrim, pCompInfo); \
0N/A return; \
0N/A }
0N/A
0N/A/***************************************************************/
0N/A
0N/A#define GET_PIXEL(pix) \
0N/A mlib_s32 pix = pixel
0N/A
0N/A/***************************************************************/
0N/A
0N/A#define DEFINE_SET_LINE(FUNC, ANYTYPE, NCHAN, DO_PIX) \
0N/Avoid ADD_SUFF(ANYTYPE##FUNC)(SurfaceDataRasInfo * pRasInfo, \
0N/A jint x1, \
0N/A jint y1, \
0N/A jint pixel, \
0N/A jint steps, \
0N/A jint error, \
0N/A jint bumpmajormask, \
0N/A jint errmajor, \
0N/A jint bumpminormask, \
0N/A jint errminor, \
0N/A NativePrimitive * pPrim, \
0N/A CompositeInfo * pCompInfo) \
0N/A{ \
0N/A ANYTYPE##DataType *pPix = (void *)(pRasInfo->rasBase); \
0N/A mlib_s32 scan = pRasInfo->scanStride; \
0N/A mlib_s32 bumpmajor, bumpminor, mask; \
0N/A GET_PIXEL(pix); \
0N/A EXTRACT_CONST_##NCHAN(pix); \
0N/A \
0N/A EXTRA_##NCHAN(FUNC, AnyInt, NCHAN, DO_PIX); \
0N/A \
0N/A PTR_ADD(pPix, y1 * scan + x1 * ANYTYPE##PixelStride); \
0N/A \
0N/A errminor += errmajor; \
0N/A \
0N/A if (bumpmajormask & 0x1) bumpmajor = ANYTYPE##PixelStride; else \
0N/A if (bumpmajormask & 0x2) bumpmajor = -ANYTYPE##PixelStride; else \
0N/A if (bumpmajormask & 0x4) bumpmajor = scan; else \
0N/A bumpmajor = - scan; \
0N/A \
0N/A if (bumpminormask & 0x1) bumpminor = ANYTYPE##PixelStride; else \
0N/A if (bumpminormask & 0x2) bumpminor = -ANYTYPE##PixelStride; else \
0N/A if (bumpminormask & 0x4) bumpminor = scan; else \
0N/A if (bumpminormask & 0x8) bumpminor = -scan; else \
0N/A bumpminor = 0; \
0N/A \
0N/A if (errmajor == 0) { \
0N/A do { \
0N/A PROCESS_PIX_##NCHAN(DO_PIX); \
0N/A PTR_ADD(pPix, bumpmajor); \
0N/A } while (--steps > 0); \
0N/A return; \
0N/A } \
0N/A \
0N/A do { \
0N/A PROCESS_PIX_##NCHAN(DO_PIX); \
0N/A mask = error >> 31; \
0N/A PTR_ADD(pPix, bumpmajor + (bumpminor &~ mask)); \
0N/A error += errmajor - (errminor &~ mask); \
0N/A } while (--steps > 0); \
0N/A}
0N/A
0N/ADEFINE_SET_LINE(SetLine, AnyInt, 1, SET_PIX)
0N/ADEFINE_SET_LINE(SetLine, AnyShort, 1, SET_PIX)
0N/ADEFINE_SET_LINE(SetLine, AnyByte, 1, SET_PIX)
0N/ADEFINE_SET_LINE(SetLine, Any3Byte, 3, SET_PIX)
0N/ADEFINE_SET_LINE(SetLine, Any4Byte, 4, SET_PIX)
0N/A
0N/A/***************************************************************/
0N/A
0N/A#undef GET_PIXEL
0N/A#define GET_PIXEL(pix) \
0N/A mlib_s32 xorpixel = pCompInfo->details.xorPixel; \
0N/A mlib_s32 alphamask = pCompInfo->alphaMask; \
0N/A mlib_s32 pix = (pixel ^ xorpixel) &~ alphamask
0N/A
0N/A#undef EXTRA_4
0N/A#define EXTRA_4(FUNC, ANYTYPE, NCHAN, DO_PIX)
0N/A
0N/ADEFINE_SET_LINE(XorLine, AnyInt, 1, XOR_PIX)
0N/ADEFINE_SET_LINE(XorLine, AnyShort, 1, XOR_PIX)
0N/ADEFINE_SET_LINE(XorLine, AnyByte, 1, XOR_PIX)
0N/ADEFINE_SET_LINE(XorLine, Any3Byte, 3, XOR_PIX)
0N/ADEFINE_SET_LINE(XorLine, Any4Byte, 4, XOR_PIX)
0N/A
0N/A/***************************************************************/
0N/A
0N/A#endif