3909N/A * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 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 * 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 * 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. 2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 0N/A * This implementation of MaskBlit first combines the source system memory 0N/A * tile with the corresponding alpha mask and stores the resulting 0N/A * IntArgbPre pixels directly into the RenderBuffer. Those pixels are 0N/A * then eventually pulled off the RenderBuffer and copied to the destination 0N/A * Note that currently there are only inner loops defined for IntArgb, 0N/A * IntArgbPre, IntRgb, and IntBgr, as those are the most commonly used 0N/A * formats for this operation. 0N/A "BufferedMaskBlit_enqueueTile: bpos=%d",
0N/A "BufferedMaskBlit_enqueueTile: srcOps is null");
0N/A "BufferedMaskBlit_enqueueTile: cannot get direct buffer address");
0N/A "BufferedMaskBlit_enqueueTile: mask array is null");
0N/A // REMIND: this approach is seriously flawed if the mask 0N/A // length is ever greater than MAX_MASK_LENGTH (won't fit 0N/A // into the cached mask tile); so far this hasn't 0N/A // been a problem though... 0N/A "BufferedMaskBlit_enqueueTile: mask array too large");
0N/A "BufferedMaskBlit_enqueueTile: could not acquire lock");
430N/A "BufferedMaskBlit_enqueueTile: cannot lock mask array");
0N/A " sx=%d sy=%d w=%d h=%d",
0N/A " maskoff=%d maskscan=%d",
0N/A " pixstride=%d scanstride=%d",
0N/A // enqueue parameters 0N/A // apply alpha values from mask to the source tile, and store 0N/A // resulting IntArgbPre pixels into RenderBuffer (there are 0N/A // separate inner loops for the most common source formats) 430N/A pBuf[0] = (a <<
24) | (r <<
16) | (g <<
8) | b;
0N/A pBuf[0] = (a <<
24) | (r <<
16) | (g <<
8) | b;
0N/A pBuf[0] = (a <<
24) | (r <<
16) | (g <<
8) | b;
0N/A pBuf[0] = (a <<
24) | (r <<
16) | (g <<
8) | b;
0N/A // should not get here, just no-op... 0N/A // increment current byte position 0N/A // return the current byte position