模块  java.desktop
软件包  java.awt.image

Class BufferStrategy

  • 已知直接子类:
    Component.BltBufferStrategyComponent.FlipBufferStrategy

    public abstract class BufferStrategy
    extends Object
    BufferStrategy类表示在特定的CanvasWindow上组织复杂内存的机制。 硬件和软件限制决定了是否以及如何实现特定的缓冲策略。 通过创建CanvasWindow时使用的GraphicsConfiguration的功能可以检测到这些限制。

    值得注意的是,术语缓冲区表面意味着同义:连续内存区域,无论是在视频设备内存中还是在系统内存中。

    有几种类型的复杂缓冲策略,包括顺序环缓冲和blit缓冲。 顺序环缓冲(即双重或三重缓冲)是最常见的; 应用程序绘制到单个后台缓冲区 ,然后通过复制数据或移动视频指针,在一个步骤中将内容移动到前面(显示)。 移动视频指针会交换缓冲区,以便绘制的第一个缓冲区成为前缓冲区 ,或者当前显示在设备上的缓冲区 ; 这称为页面翻转

    或者,可以复制后缓冲区的内容,或者在链中向前blit而不是移动视频指针。

       Double buffering: *********** *********** * * ------> * * [To display] <---- * Front B * Show * Back B. * <---- Rendering * * <------ * * *********** *********** Triple buffering: [To *********** *********** *********** display] * * --------+---------+------> * * <---- * Front B * Show * Mid. B. * * Back B. * <---- Rendering * * <------ * * <----- * * *********** *********** ***********  

    以下是如何创建和使用缓冲区策略的示例:

       // 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(); // Main loop while (!done) { // Prepare for rendering the next frame // ... // Render single frame do { // The following loop ensures that the contents of the drawing buffer // are consistent in case the underlying surface was recreated do { // Get a new graphics context every time through the loop // to make sure the strategy is validated Graphics graphics = strategy.getDrawGraphics(); // Render to graphics // ... // Dispose the graphics graphics.dispose(); // Repeat the rendering if the drawing buffer contents // were restored } while (strategy.contentsRestored()); // Display the buffer strategy.show(); // Repeat the rendering if the drawing buffer was lost } while (strategy.contentsLost()); } // Dispose the window w.setVisible(false); w.dispose();  
    从以下版本开始:
    1.4
    另请参见:
    WindowCanvasGraphicsConfigurationVolatileImage
    • 构造方法详细信息

      • BufferStrategy

        public BufferStrategy()
    • 方法详细信息

      • getCapabilities

        public abstract BufferCapabilities getCapabilities()
        返回 BufferCapabilitiesBufferStrategy
        结果
        这种策略的缓冲功能
      • getDrawGraphics

        public abstract Graphics getDrawGraphics()
        为绘图缓冲区创建图形上下文。 出于性能原因,此方法可能无法同步; 应该在应用程序级别处理多个线程使用此方法。 处理获得的图形对象必须由应用程序处理。
        结果
        绘图缓冲区的图形上下文
      • contentsLost

        public abstract boolean contentsLost()
        返回自上次调用getDrawGraphics以来绘图缓冲区是否丢失。 由于缓冲区策略中的缓冲区通常是类型VolatileImage ,因此它们可能会丢失。 有关丢失缓冲区的讨论,请参阅VolatileImage
        结果
        自上次调用 getDrawGraphics ,绘图缓冲区是否丢失。
        另请参见:
        VolatileImage
      • contentsRestored

        public abstract boolean contentsRestored()
        返回绘图缓冲区最近是否从丢失状态恢复并重新初始化为默认背景颜色(白色)。 由于缓冲区策略中的缓冲区通常是类型VolatileImage ,因此它们可能会丢失。 如果表面最近从上次调用getDrawGraphics丢失状态恢复,则可能需要重新绘制。 有关丢失缓冲区的讨论,请参阅VolatileImage
        结果
        自上次调用 getDrawGraphics以来是否恢复了绘图缓冲区。
        另请参见:
        VolatileImage
      • show

        public abstract void show()
        通过复制内存(blitting)或更改显示指针(翻转)使下一个可用缓冲区可见。