📄 bufferstrategy.java
字号:
/* * @(#)BufferStrategy.java 1.5 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.awt.image;import java.awt.BufferCapabilities;import java.awt.Graphics;import java.awt.Image;/** * The <code>BufferStrategy</code> class represents the mechanism with which * to organize complex memory on a particular <code>Canvas</code> or * <code>Window</code>. Hardware and software limitations determine whether and * how a particular buffer strategy can be implemented. These limitations * are detectible through the capabilities of the * <code>GraphicsConfiguration</code> used when creating the * <code>Canvas</code> or <code>Window</code>. * <p> * It is worth noting that the terms <i>buffer</i> and <i>surface</i> are meant * to be synonymous: an area of contiguous memory, either in video device * memory or in system memory. * <p> * There are several types of complex buffer strategies; * sequential ring buffering, blit buffering, and stereo buffering are * common types. Sequential ring buffering (i.e., double or triple * buffering) is the most common; an application draws to a single <i>back * buffer</i> and then moves the contents to the front (display) in a single * step, either by copying the data or moving the video pointer. * Moving the video pointer exchanges the buffers so that the first buffer * drawn becomes the <i>front buffer</i>, or what is currently displayed on the * device; this is called <i>page flipping</i>. * <p> * Alternatively, the contents of the back buffer can be copied, or * <i>blitted</i> forward in a chain instead of moving the video pointer. * <p> * <pre> * Double buffering: * * *********** *********** * * * ------> * * * [To display] <---- * Front B * Show * Back B. * <---- Rendering * * * <------ * * * *********** *********** * * Triple buffering: * * [To *********** *********** *********** * display] * * --------+---------+------> * * * <---- * Front B * Show * Mid. B. * * Back B. * <---- Rendering * * * <------ * * <----- * * * *********** *********** *********** * * </pre> * <p> * Stereo buffering is for hardware that supports rendering separate images for * a left and right eye. It is similar to sequential ring buffering, but * there are two buffer chains, one for each eye. Both buffer chains flip * simultaneously: * * <pre> * Stereo buffering: * * *********** *********** * * * ------> * * * [To left eye] <---- * Front B * * Back B. * <---- Rendering * * * <------ * * * *********** *********** * Show * *********** *********** * * * ------> * * * [To right eye] <--- * Front B * * Back B. * <---- Rendering * * * <------ * * * *********** *********** * </pre> * <p> * Here is an example of how buffer strategies can be created and used: * <pre><code> * * // Check the capabilities of the GraphicsConfiguration * ... * * // Create our component * Window w = new Window(gc); * * // Show our window * w.setVisible(true); * * // Create a general double-buffering strategy * w.createBufferStrategy(2); * BufferStrategy strategy = w.getBufferStrategy(); * * // Render loop * while (!done) { * Graphics g = strategy.getDrawGraphics(); * // Draw to graphics * ... * strategy.show(); * } * * // Dispose the window * w.setVisible(false); * w.dispose(); * </code></pre> * * @see java.awt.Component * @see java.awt.GraphicsConfiguration * @author Michael Martak * @since 1.4 */public abstract class BufferStrategy { /** * @return the buffering capabilities of this strategy */ public abstract BufferCapabilities getCapabilities(); /** * @return the graphics on the drawing buffer. This method may not * be synchronized for performance reasons; use of this method by multiple * threads should be handled at the application level. Disposal of the * graphics object obtained must be handled by the application. */ public abstract Graphics getDrawGraphics(); /** * Returns whether the drawing buffer was lost since the last call to * <code>getDrawGraphics</code>. Since the buffers in a buffer strategy * are usually type <code>VolatileImage</code>, they may become lost. * For a discussion on lost buffers, see <code>VolatileImage</code>. * @see java.awt.image.VolatileImage */ public abstract boolean contentsLost(); /** * Returns whether the drawing buffer was recently restored from a lost * state and reinitialized to the default background color (white). * Since the buffers in a buffer strategy are usually type * <code>VolatileImage</code>, they may become lost. If a surface has * been recently restored from a lost state since the last call to * <code>getDrawGraphics</code>, it may require repainting. * For a discussion on lost buffers, see <code>VolatileImage</code>. * @see java.awt.image.VolatileImage */ public abstract boolean contentsRestored(); /** * Makes the next available buffer visible by either copying the memory * (blitting) or changing the display pointer (flipping). */ public abstract void show();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -