1 /*
2 * Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package sun.java2d.opengl;
27
28 import java.awt.BufferCapabilities;
29 import static java.awt.BufferCapabilities.FlipContents.*;
30 import java.awt.Component;
31 import java.awt.GraphicsConfiguration;
32 import java.awt.Transparency;
33 import java.awt.image.ColorModel;
34 import sun.awt.image.SunVolatileImage;
35 import sun.awt.image.VolatileSurfaceManager;
36 import sun.awt.windows.WComponentPeer;
37 import sun.java2d.SurfaceData;
38 import static sun.java2d.opengl.OGLContext.OGLContextCaps.*;
39 import static sun.java2d.pipe.hw.AccelSurface.*;
40 import sun.java2d.pipe.hw.ExtendedBufferCapabilities;
41 import static sun.java2d.pipe.hw.ExtendedBufferCapabilities.VSyncType.*;
42
43 public class WGLVolatileSurfaceManager
44 extends VolatileSurfaceManager
45 {
46 private boolean accelerationEnabled;
47
48 public WGLVolatileSurfaceManager(SunVolatileImage vImg, Object context) {
49 super(vImg, context);
50
51 /*
52 * We will attempt to accelerate this image only under the
53 * following conditions:
56 * - the GraphicsConfig supports the FBO extension OR
57 * - the GraphicsConfig has a stored alpha channel
58 */
59 int transparency = vImg.getTransparency();
60 WGLGraphicsConfig gc = (WGLGraphicsConfig)vImg.getGraphicsConfig();
61 accelerationEnabled =
62 (transparency == Transparency.OPAQUE) ||
63 ((transparency == Transparency.TRANSLUCENT) &&
64 (gc.isCapPresent(CAPS_EXT_FBOBJECT) ||
65 gc.isCapPresent(CAPS_STORED_ALPHA)));
66 }
67
68 protected boolean isAccelerationEnabled() {
69 return accelerationEnabled;
70 }
71
72 /**
73 * Create a pbuffer-based SurfaceData object (or init the backbuffer
74 * of an existing window if this is a double buffered GraphicsConfig).
75 */
76 @SuppressWarnings("deprecation")
77 protected SurfaceData initAcceleratedSurface() {
78 SurfaceData sData;
79 Component comp = vImg.getComponent();
80 WComponentPeer peer =
81 (comp != null) ? (WComponentPeer)comp.getPeer() : null;
82
83 try {
84 boolean createVSynced = false;
85 boolean forceback = false;
86 if (context instanceof Boolean) {
87 forceback = ((Boolean)context).booleanValue();
88 if (forceback) {
89 BufferCapabilities caps = peer.getBackBufferCaps();
90 if (caps instanceof ExtendedBufferCapabilities) {
91 ExtendedBufferCapabilities ebc =
92 (ExtendedBufferCapabilities)caps;
93 if (ebc.getVSync() == VSYNC_ON &&
94 ebc.getFlipContents() == COPIED)
95 {
96 createVSynced = true;
97 forceback = false;
98 }
99 }
100 }
101 }
|
1 /*
2 * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package sun.java2d.opengl;
27
28 import java.awt.BufferCapabilities;
29 import static java.awt.BufferCapabilities.FlipContents.*;
30 import java.awt.Component;
31 import java.awt.GraphicsConfiguration;
32 import java.awt.Transparency;
33 import java.awt.image.ColorModel;
34
35 import sun.awt.AWTAccessor;
36 import sun.awt.AWTAccessor.ComponentAccessor;
37 import sun.awt.image.SunVolatileImage;
38 import sun.awt.image.VolatileSurfaceManager;
39 import sun.awt.windows.WComponentPeer;
40 import sun.java2d.SurfaceData;
41 import static sun.java2d.opengl.OGLContext.OGLContextCaps.*;
42 import static sun.java2d.pipe.hw.AccelSurface.*;
43 import sun.java2d.pipe.hw.ExtendedBufferCapabilities;
44 import static sun.java2d.pipe.hw.ExtendedBufferCapabilities.VSyncType.*;
45
46 public class WGLVolatileSurfaceManager
47 extends VolatileSurfaceManager
48 {
49 private boolean accelerationEnabled;
50
51 public WGLVolatileSurfaceManager(SunVolatileImage vImg, Object context) {
52 super(vImg, context);
53
54 /*
55 * We will attempt to accelerate this image only under the
56 * following conditions:
59 * - the GraphicsConfig supports the FBO extension OR
60 * - the GraphicsConfig has a stored alpha channel
61 */
62 int transparency = vImg.getTransparency();
63 WGLGraphicsConfig gc = (WGLGraphicsConfig)vImg.getGraphicsConfig();
64 accelerationEnabled =
65 (transparency == Transparency.OPAQUE) ||
66 ((transparency == Transparency.TRANSLUCENT) &&
67 (gc.isCapPresent(CAPS_EXT_FBOBJECT) ||
68 gc.isCapPresent(CAPS_STORED_ALPHA)));
69 }
70
71 protected boolean isAccelerationEnabled() {
72 return accelerationEnabled;
73 }
74
75 /**
76 * Create a pbuffer-based SurfaceData object (or init the backbuffer
77 * of an existing window if this is a double buffered GraphicsConfig).
78 */
79 protected SurfaceData initAcceleratedSurface() {
80 SurfaceData sData;
81 Component comp = vImg.getComponent();
82 final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
83 WComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
84
85 try {
86 boolean createVSynced = false;
87 boolean forceback = false;
88 if (context instanceof Boolean) {
89 forceback = ((Boolean)context).booleanValue();
90 if (forceback) {
91 BufferCapabilities caps = peer.getBackBufferCaps();
92 if (caps instanceof ExtendedBufferCapabilities) {
93 ExtendedBufferCapabilities ebc =
94 (ExtendedBufferCapabilities)caps;
95 if (ebc.getVSync() == VSYNC_ON &&
96 ebc.getFlipContents() == COPIED)
97 {
98 createVSynced = true;
99 forceback = false;
100 }
101 }
102 }
103 }
|