public abstract class BufferStrategy extends Object
BufferStrategy
类代表了在特定的Canvas
或Window
上组织复杂内存的Window
。
硬件和软件的限制决定了是否以及如何实现特定的缓冲策略。
这些限制是通过所述的功能可检测GraphicsConfiguration
创建时使用Canvas
或Window
。
值得注意的是, 缓冲区和表面术语意在同义:在视频设备存储器或系统存储器中连续存储器的区域。
有几种类型的复杂缓冲策略,包括顺序环形缓冲和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();
Window
, Canvas
, GraphicsConfiguration
, VolatileImage
Constructor and Description |
---|
BufferStrategy() |
Modifier and Type | Method and Description |
---|---|
abstract boolean |
contentsLost()
从上一次调用到
getDrawGraphics 返回绘图缓冲区是否丢失。
|
abstract boolean |
contentsRestored()
返回绘图缓冲区是否最近从丢失状态恢复并重新初始化为默认背景颜色(白色)。
|
void |
dispose()
释放此
BufferStrategy 当前
BufferStrategy 系统资源,并将其从关联的组件中删除。
|
abstract BufferCapabilities |
getCapabilities()
返回这个
BufferCapabilities 的
BufferStrategy 。
|
abstract Graphics |
getDrawGraphics()
为绘图缓冲区创建一个图形上下文。
|
abstract void |
show()
通过复制内存(blitting)或更改显示指针(翻转),使下一个可用的缓冲区可见。
|
public abstract BufferCapabilities getCapabilities()
BufferCapabilities
为这个
BufferStrategy
。
public abstract Graphics getDrawGraphics()
public abstract boolean contentsLost()
getDrawGraphics
绘图缓冲区是否丢失。
由于缓冲策略中的缓冲区通常是VolatileImage
型,所以它们可能会丢失。
有关丢失缓冲区的讨论,请参见VolatileImage
。
getDrawGraphics
。
VolatileImage
public abstract boolean contentsRestored()
VolatileImage
,它们可能会丢失。
最近一次调用getDrawGraphics
,如果表面最近已经从丢失状态恢复,则可能需要重新绘制。
有关丢失缓冲区的讨论,请参见VolatileImage
。
getDrawGraphics
。
VolatileImage
public abstract void show()
public void dispose()
BufferStrategy
系统资源,并将其从关联的组件中删除。
调用此方法后, getBufferStrategy
将返回null。
在BufferStrategy
之后尝试使用BufferStrategy
会导致未定义的行为。