src/java.desktop/macosx/classes/sun/java2d/metal/MetalBlitLoops.java
author jdv
Tue, 05 Mar 2019 16:36:45 +0530
branchmetal-prototype-branch
changeset 57243 8c3a74033daf
permissions -rw-r--r--
Enable resize operation for drawing primitives by adding high level blit loops logic
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57243
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
     1
/*
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
     4
 *
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    10
 *
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    15
 * accompanied this code).
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    16
 *
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    20
 *
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    23
 * questions.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    24
 */
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    25
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    26
package sun.java2d.metal;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    27
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    28
import java.awt.AlphaComposite;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    29
import java.awt.Composite;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    30
import java.awt.Transparency;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    31
import java.awt.geom.AffineTransform;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    32
import java.awt.image.AffineTransformOp;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    33
import java.awt.image.BufferedImage;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    34
import java.awt.image.BufferedImageOp;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    35
import java.lang.ref.WeakReference;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    36
import sun.java2d.SurfaceData;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    37
import sun.java2d.loops.Blit;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    38
import sun.java2d.loops.CompositeType;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    39
import sun.java2d.loops.GraphicsPrimitive;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    40
import sun.java2d.loops.GraphicsPrimitiveMgr;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    41
import sun.java2d.loops.ScaledBlit;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    42
import sun.java2d.loops.SurfaceType;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    43
import sun.java2d.loops.TransformBlit;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    44
import sun.java2d.pipe.Region;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    45
import sun.java2d.pipe.RenderBuffer;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    46
import sun.java2d.pipe.RenderQueue;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    47
import static sun.java2d.pipe.BufferedOpCodes.*;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    48
import java.lang.annotation.Native;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    49
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    50
final class MetalBlitLoops {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    51
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    52
    static void register() {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    53
        /*Blit blitIntArgbPreToSurface =
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    54
                new OGLSwToSurfaceBlit(SurfaceType.IntArgbPre,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    55
                        OGLSurfaceData.PF_INT_ARGB_PRE);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    56
        Blit blitIntArgbPreToTexture =
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    57
                new OGLSwToTextureBlit(SurfaceType.IntArgbPre,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    58
                        OGLSurfaceData.PF_INT_ARGB_PRE);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    59
        TransformBlit transformBlitIntArgbPreToSurface =
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    60
                new OGLSwToSurfaceTransform(SurfaceType.IntArgbPre,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    61
                        OGLSurfaceData.PF_INT_ARGB_PRE);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    62
        OGLSurfaceToSwBlit blitSurfaceToIntArgbPre =
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    63
                new OGLSurfaceToSwBlit(SurfaceType.IntArgbPre,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    64
                        OGLSurfaceData.PF_INT_ARGB_PRE);*/
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    65
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    66
        GraphicsPrimitive[] primitives = {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    67
                // surface->surface ops
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    68
                new MetalSurfaceToSurfaceBlit(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    69
                /*new OGLSurfaceToSurfaceBlit(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    70
                new OGLSurfaceToSurfaceScale(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    71
                new OGLSurfaceToSurfaceTransform(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    72
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    73
                // render-to-texture surface->surface ops
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    74
                new OGLRTTSurfaceToSurfaceBlit(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    75
                new OGLRTTSurfaceToSurfaceScale(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    76
                new OGLRTTSurfaceToSurfaceTransform(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    77
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    78
                // surface->sw ops
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    79
                new OGLSurfaceToSwBlit(SurfaceType.IntArgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    80
                        OGLSurfaceData.PF_INT_ARGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    81
                blitSurfaceToIntArgbPre,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    82
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    83
                // sw->surface ops
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    84
                blitIntArgbPreToSurface,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    85
                new OGLSwToSurfaceBlit(SurfaceType.IntRgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    86
                        OGLSurfaceData.PF_INT_RGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    87
                new OGLSwToSurfaceBlit(SurfaceType.IntRgbx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    88
                        OGLSurfaceData.PF_INT_RGBX),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    89
                new OGLSwToSurfaceBlit(SurfaceType.IntBgr,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    90
                        OGLSurfaceData.PF_INT_BGR),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    91
                new OGLSwToSurfaceBlit(SurfaceType.IntBgrx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    92
                        OGLSurfaceData.PF_INT_BGRX),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    93
                new OGLSwToSurfaceBlit(SurfaceType.ThreeByteBgr,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    94
                        OGLSurfaceData.PF_3BYTE_BGR),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    95
                new OGLSwToSurfaceBlit(SurfaceType.Ushort565Rgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    96
                        OGLSurfaceData.PF_USHORT_565_RGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    97
                new OGLSwToSurfaceBlit(SurfaceType.Ushort555Rgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    98
                        OGLSurfaceData.PF_USHORT_555_RGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
    99
                new OGLSwToSurfaceBlit(SurfaceType.Ushort555Rgbx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   100
                        OGLSurfaceData.PF_USHORT_555_RGBX),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   101
                new OGLSwToSurfaceBlit(SurfaceType.ByteGray,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   102
                        OGLSurfaceData.PF_BYTE_GRAY),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   103
                new OGLSwToSurfaceBlit(SurfaceType.UshortGray,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   104
                        OGLSurfaceData.PF_USHORT_GRAY),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   105
                new OGLGeneralBlit(OGLSurfaceData.OpenGLSurface,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   106
                        CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   107
                        blitIntArgbPreToSurface),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   108
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   109
                new OGLAnyCompositeBlit(OGLSurfaceData.OpenGLSurface,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   110
                        blitSurfaceToIntArgbPre,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   111
                        blitSurfaceToIntArgbPre,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   112
                        blitIntArgbPreToSurface),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   113
                new OGLAnyCompositeBlit(SurfaceType.Any,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   114
                        null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   115
                        blitSurfaceToIntArgbPre,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   116
                        blitIntArgbPreToSurface),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   117
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   118
                new OGLSwToSurfaceScale(SurfaceType.IntRgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   119
                        OGLSurfaceData.PF_INT_RGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   120
                new OGLSwToSurfaceScale(SurfaceType.IntRgbx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   121
                        OGLSurfaceData.PF_INT_RGBX),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   122
                new OGLSwToSurfaceScale(SurfaceType.IntBgr,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   123
                        OGLSurfaceData.PF_INT_BGR),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   124
                new OGLSwToSurfaceScale(SurfaceType.IntBgrx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   125
                        OGLSurfaceData.PF_INT_BGRX),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   126
                new OGLSwToSurfaceScale(SurfaceType.ThreeByteBgr,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   127
                        OGLSurfaceData.PF_3BYTE_BGR),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   128
                new OGLSwToSurfaceScale(SurfaceType.Ushort565Rgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   129
                        OGLSurfaceData.PF_USHORT_565_RGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   130
                new OGLSwToSurfaceScale(SurfaceType.Ushort555Rgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   131
                        OGLSurfaceData.PF_USHORT_555_RGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   132
                new OGLSwToSurfaceScale(SurfaceType.Ushort555Rgbx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   133
                        OGLSurfaceData.PF_USHORT_555_RGBX),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   134
                new OGLSwToSurfaceScale(SurfaceType.ByteGray,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   135
                        OGLSurfaceData.PF_BYTE_GRAY),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   136
                new OGLSwToSurfaceScale(SurfaceType.UshortGray,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   137
                        OGLSurfaceData.PF_USHORT_GRAY),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   138
                new OGLSwToSurfaceScale(SurfaceType.IntArgbPre,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   139
                        OGLSurfaceData.PF_INT_ARGB_PRE),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   140
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   141
                new OGLSwToSurfaceTransform(SurfaceType.IntRgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   142
                        OGLSurfaceData.PF_INT_RGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   143
                new OGLSwToSurfaceTransform(SurfaceType.IntRgbx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   144
                        OGLSurfaceData.PF_INT_RGBX),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   145
                new OGLSwToSurfaceTransform(SurfaceType.IntBgr,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   146
                        OGLSurfaceData.PF_INT_BGR),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   147
                new OGLSwToSurfaceTransform(SurfaceType.IntBgrx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   148
                        OGLSurfaceData.PF_INT_BGRX),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   149
                new OGLSwToSurfaceTransform(SurfaceType.ThreeByteBgr,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   150
                        OGLSurfaceData.PF_3BYTE_BGR),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   151
                new OGLSwToSurfaceTransform(SurfaceType.Ushort565Rgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   152
                        OGLSurfaceData.PF_USHORT_565_RGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   153
                new OGLSwToSurfaceTransform(SurfaceType.Ushort555Rgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   154
                        OGLSurfaceData.PF_USHORT_555_RGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   155
                new OGLSwToSurfaceTransform(SurfaceType.Ushort555Rgbx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   156
                        OGLSurfaceData.PF_USHORT_555_RGBX),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   157
                new OGLSwToSurfaceTransform(SurfaceType.ByteGray,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   158
                        OGLSurfaceData.PF_BYTE_GRAY),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   159
                new OGLSwToSurfaceTransform(SurfaceType.UshortGray,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   160
                        OGLSurfaceData.PF_USHORT_GRAY),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   161
                transformBlitIntArgbPreToSurface,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   162
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   163
                new OGLGeneralTransformedBlit(transformBlitIntArgbPreToSurface),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   164
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   165
                // texture->surface ops
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   166
                new OGLTextureToSurfaceBlit(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   167
                new OGLTextureToSurfaceScale(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   168
                new OGLTextureToSurfaceTransform(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   169
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   170
                // sw->texture ops
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   171
                blitIntArgbPreToTexture,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   172
                new OGLSwToTextureBlit(SurfaceType.IntRgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   173
                        OGLSurfaceData.PF_INT_RGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   174
                new OGLSwToTextureBlit(SurfaceType.IntRgbx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   175
                        OGLSurfaceData.PF_INT_RGBX),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   176
                new OGLSwToTextureBlit(SurfaceType.IntBgr,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   177
                        OGLSurfaceData.PF_INT_BGR),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   178
                new OGLSwToTextureBlit(SurfaceType.IntBgrx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   179
                        OGLSurfaceData.PF_INT_BGRX),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   180
                new OGLSwToTextureBlit(SurfaceType.ThreeByteBgr,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   181
                        OGLSurfaceData.PF_3BYTE_BGR),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   182
                new OGLSwToTextureBlit(SurfaceType.Ushort565Rgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   183
                        OGLSurfaceData.PF_USHORT_565_RGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   184
                new OGLSwToTextureBlit(SurfaceType.Ushort555Rgb,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   185
                        OGLSurfaceData.PF_USHORT_555_RGB),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   186
                new OGLSwToTextureBlit(SurfaceType.Ushort555Rgbx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   187
                        OGLSurfaceData.PF_USHORT_555_RGBX),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   188
                new OGLSwToTextureBlit(SurfaceType.ByteGray,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   189
                        OGLSurfaceData.PF_BYTE_GRAY),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   190
                new OGLSwToTextureBlit(SurfaceType.UshortGray,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   191
                        OGLSurfaceData.PF_USHORT_GRAY),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   192
                new OGLGeneralBlit(OGLSurfaceData.OpenGLTexture,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   193
                        CompositeType.SrcNoEa,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   194
                        blitIntArgbPreToTexture),*/
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   195
        };
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   196
        GraphicsPrimitiveMgr.register(primitives);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   197
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   198
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   199
    /**
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   200
     * The following offsets are used to pack the parameters in
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   201
     * createPackedParams().  (They are also used at the native level when
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   202
     * unpacking the params.)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   203
     */
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   204
    @Native private static final int OFFSET_SRCTYPE = 16;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   205
    @Native private static final int OFFSET_HINT    =  8;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   206
    @Native private static final int OFFSET_TEXTURE =  3;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   207
    @Native private static final int OFFSET_RTT     =  2;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   208
    @Native private static final int OFFSET_XFORM   =  1;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   209
    @Native private static final int OFFSET_ISOBLIT =  0;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   210
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   211
    /**
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   212
     * Packs the given parameters into a single int value in order to save
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   213
     * space on the rendering queue.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   214
     */
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   215
    private static int createPackedParams(boolean isoblit, boolean texture,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   216
                                          boolean rtt, boolean xform,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   217
                                          int hint, int srctype)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   218
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   219
        return
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   220
                ((srctype           << OFFSET_SRCTYPE) |
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   221
                        (hint              << OFFSET_HINT   ) |
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   222
                        ((texture ? 1 : 0) << OFFSET_TEXTURE) |
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   223
                        ((rtt     ? 1 : 0) << OFFSET_RTT    ) |
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   224
                        ((xform   ? 1 : 0) << OFFSET_XFORM  ) |
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   225
                        ((isoblit ? 1 : 0) << OFFSET_ISOBLIT));
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   226
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   227
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   228
    /**
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   229
     * Enqueues a BLIT operation with the given parameters.  Note that the
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   230
     * RenderQueue lock must be held before calling this method.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   231
     */
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   232
    private static void enqueueBlit(RenderQueue rq,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   233
                                    SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   234
                                    int packedParams,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   235
                                    int sx1, int sy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   236
                                    int sx2, int sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   237
                                    double dx1, double dy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   238
                                    double dx2, double dy2)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   239
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   240
        // assert rq.lock.isHeldByCurrentThread();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   241
        RenderBuffer buf = rq.getBuffer();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   242
        rq.ensureCapacityAndAlignment(72, 24);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   243
        buf.putInt(BLIT);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   244
        buf.putInt(packedParams);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   245
        buf.putInt(sx1).putInt(sy1);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   246
        buf.putInt(sx2).putInt(sy2);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   247
        buf.putDouble(dx1).putDouble(dy1);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   248
        buf.putDouble(dx2).putDouble(dy2);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   249
        buf.putLong(src.getNativeOps());
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   250
        buf.putLong(dst.getNativeOps());
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   251
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   252
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   253
    /*static void Blit(SurfaceData srcData, SurfaceData dstData,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   254
                     Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   255
                     AffineTransform xform, int hint,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   256
                     int sx1, int sy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   257
                     int sx2, int sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   258
                     double dx1, double dy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   259
                     double dx2, double dy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   260
                     int srctype, boolean texture)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   261
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   262
        int ctxflags = 0;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   263
        if (srcData.getTransparency() == Transparency.OPAQUE) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   264
            ctxflags |= OGLContext.SRC_IS_OPAQUE;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   265
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   266
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   267
        OGLRenderQueue rq = OGLRenderQueue.getInstance();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   268
        rq.lock();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   269
        try {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   270
            // make sure the RenderQueue keeps a hard reference to the
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   271
            // source (sysmem) SurfaceData to prevent it from being
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   272
            // disposed while the operation is processed on the QFT
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   273
            rq.addReference(srcData);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   274
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   275
            OGLSurfaceData oglDst = (OGLSurfaceData)dstData;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   276
            if (texture) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   277
                // make sure we have a current context before uploading
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   278
                // the sysmem data to the texture object
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   279
                OGLGraphicsConfig gc = oglDst.getOGLGraphicsConfig();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   280
                OGLContext.setScratchSurface(gc);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   281
            } else {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   282
                OGLContext.validateContext(oglDst, oglDst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   283
                        clip, comp, xform, null, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   284
                        ctxflags);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   285
            }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   286
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   287
            int packedParams = createPackedParams(false, texture,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   288
                    false, xform != null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   289
                    hint, srctype);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   290
            enqueueBlit(rq, srcData, dstData,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   291
                    packedParams,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   292
                    sx1, sy1, sx2, sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   293
                    dx1, dy1, dx2, dy2);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   294
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   295
            // always flush immediately, since we (currently) have no means
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   296
            // of tracking changes to the system memory surface
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   297
            rq.flushNow();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   298
        } finally {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   299
            rq.unlock();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   300
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   301
    }*/
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   302
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   303
    /**
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   304
     * Note: The srcImg and biop parameters are only used when invoked
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   305
     * from the OGLBufImgOps.renderImageWithOp() method; in all other cases,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   306
     * this method can be called with null values for those two parameters,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   307
     * and they will be effectively ignored.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   308
     */
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   309
    static void IsoBlit(SurfaceData srcData, SurfaceData dstData,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   310
                        BufferedImage srcImg, BufferedImageOp biop,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   311
                        Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   312
                        AffineTransform xform, int hint,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   313
                        int sx1, int sy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   314
                        int sx2, int sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   315
                        double dx1, double dy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   316
                        double dx2, double dy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   317
                        boolean texture)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   318
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   319
        /*int ctxflags = 0;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   320
        if (srcData.getTransparency() == Transparency.OPAQUE) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   321
            ctxflags |= OGLContext.SRC_IS_OPAQUE;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   322
        }*/
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   323
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   324
        MetalRenderQueue rq = MetalRenderQueue.getInstance();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   325
        rq.lock();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   326
        try {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   327
            MetalSurfaceData metalSrc = (MetalSurfaceData)srcData;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   328
            MetalSurfaceData metalDst = (MetalSurfaceData)dstData;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   329
            int srctype = metalSrc.getType();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   330
            /*boolean rtt;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   331
            OGLSurfaceData srcCtxData;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   332
            if (srctype == OGLSurfaceData.TEXTURE) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   333
                // the source is a regular texture object; we substitute
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   334
                // the destination surface for the purposes of making a
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   335
                // context current
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   336
                rtt = false;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   337
                srcCtxData = oglDst;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   338
            } else {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   339
                // the source is a pbuffer, backbuffer, or render-to-texture
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   340
                // surface; we set rtt to true to differentiate this kind
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   341
                // of surface from a regular texture object
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   342
                rtt = true;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   343
                if (srctype == OGLSurfaceData.FBOBJECT) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   344
                    srcCtxData = oglDst;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   345
                } else {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   346
                    srcCtxData = oglSrc;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   347
                }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   348
            }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   349
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   350
            OGLContext.validateContext(srcCtxData, oglDst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   351
                    clip, comp, xform, null, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   352
                    ctxflags);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   353
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   354
            if (biop != null) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   355
                OGLBufImgOps.enableBufImgOp(rq, oglSrc, srcImg, biop);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   356
            }*/
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   357
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   358
            int packedParams = createPackedParams(true, texture,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   359
                    false, xform != null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   360
                    hint, 0 /*unused*/);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   361
            enqueueBlit(rq, srcData, dstData,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   362
                    packedParams,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   363
                    sx1, sy1, sx2, sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   364
                    dx1, dy1, dx2, dy2);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   365
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   366
            /*if (biop != null) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   367
                OGLBufImgOps.disableBufImgOp(rq, biop);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   368
            }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   369
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   370
            if (rtt && oglDst.isOnScreen()) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   371
                // we only have to flush immediately when copying from a
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   372
                // (non-texture) surface to the screen; otherwise Swing apps
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   373
                // might appear unresponsive until the auto-flush completes
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   374
                rq.flushNow();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   375
            }*/
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   376
        } finally {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   377
            rq.unlock();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   378
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   379
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   380
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   381
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   382
/*class OGLSurfaceToSurfaceBlit extends Blit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   383
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   384
    OGLSurfaceToSurfaceBlit() {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   385
        super(OGLSurfaceData.OpenGLSurface,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   386
                CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   387
                OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   388
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   389
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   390
    public void Blit(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   391
                     Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   392
                     int sx, int sy, int dx, int dy, int w, int h)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   393
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   394
        OGLBlitLoops.IsoBlit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   395
                null, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   396
                comp, clip, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   397
                AffineTransformOp.TYPE_NEAREST_NEIGHBOR,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   398
                sx, sy, sx+w, sy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   399
                dx, dy, dx+w, dy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   400
                false);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   401
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   402
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   403
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   404
class OGLSurfaceToSurfaceScale extends ScaledBlit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   405
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   406
    OGLSurfaceToSurfaceScale() {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   407
        super(OGLSurfaceData.OpenGLSurface,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   408
                CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   409
                OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   410
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   411
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   412
    public void Scale(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   413
                      Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   414
                      int sx1, int sy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   415
                      int sx2, int sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   416
                      double dx1, double dy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   417
                      double dx2, double dy2)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   418
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   419
        OGLBlitLoops.IsoBlit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   420
                null, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   421
                comp, clip, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   422
                AffineTransformOp.TYPE_NEAREST_NEIGHBOR,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   423
                sx1, sy1, sx2, sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   424
                dx1, dy1, dx2, dy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   425
                false);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   426
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   427
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   428
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   429
class OGLSurfaceToSurfaceTransform extends TransformBlit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   430
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   431
    OGLSurfaceToSurfaceTransform() {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   432
        super(OGLSurfaceData.OpenGLSurface,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   433
                CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   434
                OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   435
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   436
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   437
    public void Transform(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   438
                          Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   439
                          AffineTransform at, int hint,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   440
                          int sx, int sy, int dx, int dy,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   441
                          int w, int h)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   442
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   443
        OGLBlitLoops.IsoBlit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   444
                null, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   445
                comp, clip, at, hint,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   446
                sx, sy, sx+w, sy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   447
                dx, dy, dx+w, dy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   448
                false);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   449
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   450
}*/
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   451
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   452
class MetalSurfaceToSurfaceBlit extends Blit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   453
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   454
    MetalSurfaceToSurfaceBlit() {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   455
        super(MetalSurfaceData.MetalSurface,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   456
                CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   457
                MetalSurfaceData.MetalSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   458
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   459
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   460
    public void Blit(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   461
                     Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   462
                     int sx, int sy, int dx, int dy, int w, int h)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   463
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   464
        // TODO : Eventhough we push IsoBlit logic into queue,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   465
        // in renderer we have not yet implemented blit.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   466
        MetalBlitLoops.IsoBlit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   467
                null, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   468
                comp, clip, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   469
                AffineTransformOp.TYPE_NEAREST_NEIGHBOR,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   470
                sx, sy, sx+w, sy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   471
                dx, dy, dx+w, dy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   472
                true);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   473
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   474
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   475
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   476
/*class OGLRTTSurfaceToSurfaceScale extends ScaledBlit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   477
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   478
    OGLRTTSurfaceToSurfaceScale() {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   479
        super(OGLSurfaceData.OpenGLSurfaceRTT,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   480
                CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   481
                OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   482
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   483
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   484
    public void Scale(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   485
                      Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   486
                      int sx1, int sy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   487
                      int sx2, int sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   488
                      double dx1, double dy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   489
                      double dx2, double dy2)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   490
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   491
        OGLBlitLoops.IsoBlit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   492
                null, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   493
                comp, clip, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   494
                AffineTransformOp.TYPE_NEAREST_NEIGHBOR,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   495
                sx1, sy1, sx2, sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   496
                dx1, dy1, dx2, dy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   497
                true);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   498
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   499
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   500
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   501
class OGLRTTSurfaceToSurfaceTransform extends TransformBlit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   502
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   503
    OGLRTTSurfaceToSurfaceTransform() {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   504
        super(OGLSurfaceData.OpenGLSurfaceRTT,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   505
                CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   506
                OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   507
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   508
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   509
    public void Transform(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   510
                          Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   511
                          AffineTransform at, int hint,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   512
                          int sx, int sy, int dx, int dy, int w, int h)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   513
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   514
        OGLBlitLoops.IsoBlit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   515
                null, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   516
                comp, clip, at, hint,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   517
                sx, sy, sx+w, sy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   518
                dx, dy, dx+w, dy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   519
                true);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   520
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   521
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   522
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   523
final class OGLSurfaceToSwBlit extends Blit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   524
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   525
    private final int typeval;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   526
    private WeakReference<SurfaceData> srcTmp;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   527
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   528
    // destination will actually be ArgbPre or Argb
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   529
    OGLSurfaceToSwBlit(final SurfaceType dstType,final int typeval) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   530
        super(OGLSurfaceData.OpenGLSurface,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   531
                CompositeType.SrcNoEa,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   532
                dstType);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   533
        this.typeval = typeval;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   534
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   535
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   536
    private synchronized void complexClipBlit(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   537
                                              Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   538
                                              int sx, int sy, int dx, int dy,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   539
                                              int w, int h) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   540
        SurfaceData cachedSrc = null;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   541
        if (srcTmp != null) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   542
            // use cached intermediate surface, if available
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   543
            cachedSrc = srcTmp.get();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   544
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   545
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   546
        // We can convert argb_pre data from OpenGL surface in two places:
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   547
        // - During OpenGL surface -> SW blit
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   548
        // - During SW -> SW blit
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   549
        // The first one is faster when we use opaque OGL surface, because in
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   550
        // this case we simply skip conversion and use color components as is.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   551
        // Because of this we align intermediate buffer type with type of
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   552
        // destination not source.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   553
        final int type = typeval == OGLSurfaceData.PF_INT_ARGB_PRE ?
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   554
                BufferedImage.TYPE_INT_ARGB_PRE :
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   555
                BufferedImage.TYPE_INT_ARGB;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   556
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   557
        src = convertFrom(this, src, sx, sy, w, h, cachedSrc, type);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   558
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   559
        // copy intermediate SW to destination SW using complex clip
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   560
        final Blit performop = Blit.getFromCache(src.getSurfaceType(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   561
                CompositeType.SrcNoEa,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   562
                dst.getSurfaceType());
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   563
        performop.Blit(src, dst, comp, clip, 0, 0, dx, dy, w, h);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   564
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   565
        if (src != cachedSrc) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   566
            // cache the intermediate surface
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   567
            srcTmp = new WeakReference<>(src);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   568
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   569
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   570
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   571
    public void Blit(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   572
                     Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   573
                     int sx, int sy, int dx, int dy,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   574
                     int w, int h)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   575
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   576
        if (clip != null) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   577
            clip = clip.getIntersectionXYWH(dx, dy, w, h);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   578
            // At the end this method will flush the RenderQueue, we should exit
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   579
            // from it as soon as possible.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   580
            if (clip.isEmpty()) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   581
                return;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   582
            }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   583
            sx += clip.getLoX() - dx;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   584
            sy += clip.getLoY() - dy;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   585
            dx = clip.getLoX();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   586
            dy = clip.getLoY();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   587
            w = clip.getWidth();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   588
            h = clip.getHeight();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   589
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   590
            if (!clip.isRectangular()) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   591
                complexClipBlit(src, dst, comp, clip, sx, sy, dx, dy, w, h);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   592
                return;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   593
            }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   594
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   595
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   596
        OGLRenderQueue rq = OGLRenderQueue.getInstance();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   597
        rq.lock();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   598
        try {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   599
            // make sure the RenderQueue keeps a hard reference to the
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   600
            // destination (sysmem) SurfaceData to prevent it from being
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   601
            // disposed while the operation is processed on the QFT
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   602
            rq.addReference(dst);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   603
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   604
            RenderBuffer buf = rq.getBuffer();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   605
            OGLContext.validateContext((OGLSurfaceData)src);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   606
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   607
            rq.ensureCapacityAndAlignment(48, 32);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   608
            buf.putInt(SURFACE_TO_SW_BLIT);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   609
            buf.putInt(sx).putInt(sy);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   610
            buf.putInt(dx).putInt(dy);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   611
            buf.putInt(w).putInt(h);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   612
            buf.putInt(typeval);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   613
            buf.putLong(src.getNativeOps());
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   614
            buf.putLong(dst.getNativeOps());
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   615
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   616
            // always flush immediately
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   617
            rq.flushNow();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   618
        } finally {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   619
            rq.unlock();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   620
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   621
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   622
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   623
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   624
class OGLSwToSurfaceBlit extends Blit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   625
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   626
    private int typeval;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   627
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   628
    OGLSwToSurfaceBlit(SurfaceType srcType, int typeval) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   629
        super(srcType,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   630
                CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   631
                OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   632
        this.typeval = typeval;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   633
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   634
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   635
    public void Blit(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   636
                     Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   637
                     int sx, int sy, int dx, int dy, int w, int h)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   638
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   639
        OGLBlitLoops.Blit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   640
                comp, clip, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   641
                AffineTransformOp.TYPE_NEAREST_NEIGHBOR,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   642
                sx, sy, sx+w, sy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   643
                dx, dy, dx+w, dy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   644
                typeval, false);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   645
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   646
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   647
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   648
class OGLSwToSurfaceScale extends ScaledBlit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   649
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   650
    private int typeval;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   651
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   652
    OGLSwToSurfaceScale(SurfaceType srcType, int typeval) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   653
        super(srcType,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   654
                CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   655
                OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   656
        this.typeval = typeval;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   657
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   658
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   659
    public void Scale(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   660
                      Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   661
                      int sx1, int sy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   662
                      int sx2, int sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   663
                      double dx1, double dy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   664
                      double dx2, double dy2)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   665
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   666
        OGLBlitLoops.Blit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   667
                comp, clip, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   668
                AffineTransformOp.TYPE_NEAREST_NEIGHBOR,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   669
                sx1, sy1, sx2, sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   670
                dx1, dy1, dx2, dy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   671
                typeval, false);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   672
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   673
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   674
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   675
class OGLSwToSurfaceTransform extends TransformBlit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   676
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   677
    private int typeval;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   678
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   679
    OGLSwToSurfaceTransform(SurfaceType srcType, int typeval) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   680
        super(srcType,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   681
                CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   682
                OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   683
        this.typeval = typeval;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   684
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   685
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   686
    public void Transform(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   687
                          Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   688
                          AffineTransform at, int hint,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   689
                          int sx, int sy, int dx, int dy, int w, int h)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   690
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   691
        OGLBlitLoops.Blit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   692
                comp, clip, at, hint,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   693
                sx, sy, sx+w, sy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   694
                dx, dy, dx+w, dy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   695
                typeval, false);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   696
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   697
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   698
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   699
class OGLSwToTextureBlit extends Blit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   700
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   701
    private int typeval;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   702
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   703
    OGLSwToTextureBlit(SurfaceType srcType, int typeval) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   704
        super(srcType,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   705
                CompositeType.SrcNoEa,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   706
                OGLSurfaceData.OpenGLTexture);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   707
        this.typeval = typeval;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   708
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   709
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   710
    public void Blit(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   711
                     Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   712
                     int sx, int sy, int dx, int dy, int w, int h)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   713
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   714
        OGLBlitLoops.Blit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   715
                comp, clip, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   716
                AffineTransformOp.TYPE_NEAREST_NEIGHBOR,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   717
                sx, sy, sx+w, sy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   718
                dx, dy, dx+w, dy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   719
                typeval, true);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   720
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   721
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   722
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   723
class OGLTextureToSurfaceBlit extends Blit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   724
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   725
    OGLTextureToSurfaceBlit() {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   726
        super(OGLSurfaceData.OpenGLTexture,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   727
                CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   728
                OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   729
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   730
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   731
    public void Blit(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   732
                     Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   733
                     int sx, int sy, int dx, int dy, int w, int h)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   734
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   735
        OGLBlitLoops.IsoBlit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   736
                null, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   737
                comp, clip, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   738
                AffineTransformOp.TYPE_NEAREST_NEIGHBOR,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   739
                sx, sy, sx+w, sy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   740
                dx, dy, dx+w, dy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   741
                true);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   742
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   743
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   744
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   745
class OGLTextureToSurfaceScale extends ScaledBlit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   746
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   747
    OGLTextureToSurfaceScale() {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   748
        super(OGLSurfaceData.OpenGLTexture,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   749
                CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   750
                OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   751
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   752
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   753
    public void Scale(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   754
                      Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   755
                      int sx1, int sy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   756
                      int sx2, int sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   757
                      double dx1, double dy1,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   758
                      double dx2, double dy2)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   759
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   760
        OGLBlitLoops.IsoBlit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   761
                null, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   762
                comp, clip, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   763
                AffineTransformOp.TYPE_NEAREST_NEIGHBOR,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   764
                sx1, sy1, sx2, sy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   765
                dx1, dy1, dx2, dy2,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   766
                true);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   767
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   768
}
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   769
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   770
class OGLTextureToSurfaceTransform extends TransformBlit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   771
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   772
    OGLTextureToSurfaceTransform() {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   773
        super(OGLSurfaceData.OpenGLTexture,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   774
                CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   775
                OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   776
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   777
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   778
    public void Transform(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   779
                          Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   780
                          AffineTransform at, int hint,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   781
                          int sx, int sy, int dx, int dy,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   782
                          int w, int h)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   783
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   784
        OGLBlitLoops.IsoBlit(src, dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   785
                null, null,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   786
                comp, clip, at, hint,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   787
                sx, sy, sx+w, sy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   788
                dx, dy, dx+w, dy+h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   789
                true);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   790
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   791
}*/
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   792
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   793
/**
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   794
 * This general Blit implementation converts any source surface to an
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   795
 * intermediate IntArgbPre surface, and then uses the more specific
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   796
 * IntArgbPre->OpenGLSurface/Texture loop to get the intermediate
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   797
 * (premultiplied) surface down to OpenGL using simple blit.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   798
 */
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   799
/*class OGLGeneralBlit extends Blit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   800
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   801
    private final Blit performop;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   802
    private WeakReference<SurfaceData> srcTmp;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   803
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   804
    OGLGeneralBlit(SurfaceType dstType,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   805
                   CompositeType compType,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   806
                   Blit performop)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   807
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   808
        super(SurfaceType.Any, compType, dstType);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   809
        this.performop = performop;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   810
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   811
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   812
    public synchronized void Blit(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   813
                                  Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   814
                                  int sx, int sy, int dx, int dy,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   815
                                  int w, int h)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   816
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   817
        Blit convertsrc = Blit.getFromCache(src.getSurfaceType(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   818
                CompositeType.SrcNoEa,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   819
                SurfaceType.IntArgbPre);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   820
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   821
        SurfaceData cachedSrc = null;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   822
        if (srcTmp != null) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   823
            // use cached intermediate surface, if available
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   824
            cachedSrc = srcTmp.get();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   825
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   826
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   827
        // convert source to IntArgbPre
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   828
        src = convertFrom(convertsrc, src, sx, sy, w, h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   829
                cachedSrc, BufferedImage.TYPE_INT_ARGB_PRE);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   830
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   831
        // copy IntArgbPre intermediate surface to OpenGL surface
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   832
        performop.Blit(src, dst, comp, clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   833
                0, 0, dx, dy, w, h);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   834
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   835
        if (src != cachedSrc) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   836
            // cache the intermediate surface
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   837
            srcTmp = new WeakReference<>(src);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   838
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   839
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   840
}*/
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   841
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   842
/**
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   843
 * This general TransformedBlit implementation converts any source surface to an
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   844
 * intermediate IntArgbPre surface, and then uses the more specific
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   845
 * IntArgbPre->OpenGLSurface/Texture loop to get the intermediate
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   846
 * (premultiplied) surface down to OpenGL using simple transformBlit.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   847
 */
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   848
/*final class OGLGeneralTransformedBlit extends TransformBlit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   849
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   850
    private final TransformBlit performop;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   851
    private WeakReference<SurfaceData> srcTmp;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   852
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   853
    OGLGeneralTransformedBlit(final TransformBlit performop) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   854
        super(SurfaceType.Any, CompositeType.AnyAlpha,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   855
                OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   856
        this.performop = performop;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   857
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   858
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   859
    @Override
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   860
    public synchronized void Transform(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   861
                                       Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   862
                                       AffineTransform at, int hint, int srcx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   863
                                       int srcy, int dstx, int dsty, int width,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   864
                                       int height){
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   865
        Blit convertsrc = Blit.getFromCache(src.getSurfaceType(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   866
                CompositeType.SrcNoEa,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   867
                SurfaceType.IntArgbPre);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   868
        // use cached intermediate surface, if available
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   869
        final SurfaceData cachedSrc = srcTmp != null ? srcTmp.get() : null;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   870
        // convert source to IntArgbPre
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   871
        src = convertFrom(convertsrc, src, srcx, srcy, width, height, cachedSrc,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   872
                BufferedImage.TYPE_INT_ARGB_PRE);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   873
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   874
        // transform IntArgbPre intermediate surface to OpenGL surface
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   875
        performop.Transform(src, dst, comp, clip, at, hint, 0, 0, dstx, dsty,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   876
                width, height);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   877
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   878
        if (src != cachedSrc) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   879
            // cache the intermediate surface
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   880
            srcTmp = new WeakReference<>(src);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   881
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   882
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   883
}*/
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   884
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   885
/**
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   886
 * This general OGLAnyCompositeBlit implementation can convert any source/target
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   887
 * surface to an intermediate surface using convertsrc/convertdst loops, applies
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   888
 * necessary composite operation, and then uses convertresult loop to get the
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   889
 * intermediate surface down to OpenGL.
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   890
 */
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   891
/*final class OGLAnyCompositeBlit extends Blit {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   892
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   893
    private WeakReference<SurfaceData> dstTmp;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   894
    private WeakReference<SurfaceData> srcTmp;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   895
    private final Blit convertsrc;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   896
    private final Blit convertdst;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   897
    private final Blit convertresult;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   898
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   899
    OGLAnyCompositeBlit(SurfaceType srctype, Blit convertsrc, Blit convertdst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   900
                        Blit convertresult) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   901
        super(srctype, CompositeType.Any, OGLSurfaceData.OpenGLSurface);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   902
        this.convertsrc = convertsrc;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   903
        this.convertdst = convertdst;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   904
        this.convertresult = convertresult;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   905
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   906
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   907
    public synchronized void Blit(SurfaceData src, SurfaceData dst,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   908
                                  Composite comp, Region clip,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   909
                                  int sx, int sy, int dx, int dy,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   910
                                  int w, int h)
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   911
    {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   912
        if (convertsrc != null) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   913
            SurfaceData cachedSrc = null;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   914
            if (srcTmp != null) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   915
                // use cached intermediate surface, if available
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   916
                cachedSrc = srcTmp.get();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   917
            }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   918
            // convert source to IntArgbPre
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   919
            src = convertFrom(convertsrc, src, sx, sy, w, h, cachedSrc,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   920
                    BufferedImage.TYPE_INT_ARGB_PRE);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   921
            if (src != cachedSrc) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   922
                // cache the intermediate surface
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   923
                srcTmp = new WeakReference<>(src);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   924
            }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   925
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   926
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   927
        SurfaceData cachedDst = null;
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   928
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   929
        if (dstTmp != null) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   930
            // use cached intermediate surface, if available
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   931
            cachedDst = dstTmp.get();
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   932
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   933
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   934
        // convert destination to IntArgbPre
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   935
        SurfaceData dstBuffer = convertFrom(convertdst, dst, dx, dy, w, h,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   936
                cachedDst, BufferedImage.TYPE_INT_ARGB_PRE);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   937
        Region bufferClip =
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   938
                clip == null ? null : clip.getTranslatedRegion(-dx, -dy);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   939
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   940
        Blit performop = Blit.getFromCache(src.getSurfaceType(),
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   941
                CompositeType.Any, dstBuffer.getSurfaceType());
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   942
        performop.Blit(src, dstBuffer, comp, bufferClip, sx, sy, 0, 0, w, h);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   943
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   944
        if (dstBuffer != cachedDst) {
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   945
            // cache the intermediate surface
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   946
            dstTmp = new WeakReference<>(dstBuffer);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   947
        }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   948
        // now blit the buffer back to the destination
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   949
        convertresult.Blit(dstBuffer, dst, AlphaComposite.Src, clip, 0, 0, dx,
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   950
                dy, w, h);
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   951
    }
8c3a74033daf Enable resize operation for drawing primitives by adding high level blit loops logic
jdv
parents:
diff changeset
   952
}*/