JavaTM 2 Platform
Standard Ed. 6

java.awt.image
類別 BufferStrategy

java.lang.Object
  繼承者 java.awt.image.BufferStrategy
直接已知子類別:
Component.BltBufferStrategy, Component.FlipBufferStrategy

public abstract class BufferStrategy
extends Object

BufferStrategy 類別表示用來在特定的 CanvasWindow 上組織複雜記憶體的機制。硬體和軟體限制決定了是否能夠實作特定的緩衝區策略以及如何實作它。從創建 CanvasWindow 時所用 GraphicsConfiguration 的性能中可以發覺這些限制。

值得注意的是,術語 buffersurface 意思相同:視頻設備記憶體或系統記憶體中的連續記憶體區域。

存在幾種型別的複雜緩衝區策略,包括連續環形緩衝和 blit 緩衝。連續環形緩衝(即雙緩衝或三次緩衝)是最常見的緩衝區策略;將一個應用程序繪製到單個後備緩衝區,然後只用一個步驟將其內容移入到前端(顯示),這可通過複製資料或移動視頻指針完成。移動視頻指針可交換緩衝區,於是繪製的第一個緩衝區成為前端緩衝區,或稱設備上當前所顯示的內容;這稱為頁面翻轉

作為一種替代方式,可以複製後備緩衝區的內容,即使用鏈而不是移動視頻指針進行位圖傳輸 (blitted)

雙緩衝:
                    ***********         ***********
                    *         * ------> *         *
 [到顯示器]    <---- * Front B *   顯示  * Back B. * <---- 呈現
                    *         * <------ *         *
                    ***********         ***********

三次緩衝:

 [到      ***********         ***********        ***********
顯示器]   *         * --------+---------+------> *         *
    <---- * Front B *   顯示  * Mid. B. *        * Back B. * <---- 呈現
          *         * <------ *         * <----- *         *
          ***********         ***********        ***********
 

以下是一個如何創建和使用緩衝區策略的例子:



 // 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
另請參見:
Component, GraphicsConfiguration, VolatileImage

建構子摘要
BufferStrategy()
           
 
方法摘要
abstract  boolean contentsLost()
          返回上次調用 getDrawGraphics 後繪製緩衝區是否丟失。
abstract  boolean contentsRestored()
          返回繪製緩衝區最近是否從丟失狀態恢復,並重新初始化為預設背景色(白色)。
 void dispose()
          釋放當前由此 BufferStrategy 使用的系統資源,並從關聯 Component 中移除它們。
abstract  BufferCapabilities getCapabilities()
          返回此 BufferStrategyBufferCapabilities
abstract  Graphics getDrawGraphics()
          創建用於繪製緩衝區的圖形上下文。
abstract  void show()
          通過複製記憶體(位圖傳輸)或更改顯示指針(翻轉)使下一個可用緩衝區可見。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

BufferStrategy

public BufferStrategy()
方法詳細資訊

getCapabilities

public abstract BufferCapabilities getCapabilities()
返回此 BufferStrategyBufferCapabilities

返回:
此策略的緩衝性能

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()
通過複製記憶體(位圖傳輸)或更改顯示指針(翻轉)使下一個可用緩衝區可見。


dispose

public void dispose()
釋放當前由此 BufferStrategy 使用的系統資源,並從關聯 Component 中移除它們。在調用此方法之後,getBufferStrategy 將返回 null。試圖在釋放 BufferStrategy 後使用它將導致不確定的行為。

從以下版本開始:
1.6
另請參見:
Component.createBufferStrategy(int), Component.getBufferStrategy()

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only