Класс BufferStrategy
- java.lang.Object
-
- java.awt.image.BufferStrategy
- Прямые известные подклассы:
- Component.BltBufferStrategy, Component.FlipBufferStrategy
public abstract class BufferStrategy extends Object
Класс BufferStrategy представляет механизм организации сложной памяти на конкретном Canvas или 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();
- С момента:
- 1.4
- См. также:
-
Window,Canvas,GraphicsConfiguration,VolatileImage
Конструкторы
| Конструктор и описание |
|---|
BufferStrategy() |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
abstract boolean |
contentsLost() Возвращает, был ли буфер отрисовки потерян с момента последнего вызова |
abstract boolean |
contentsRestored() Возвращает, был ли буфер отрисовки недавно восстановлен из состояния потери и повторно инициализирован до стандартного фонового цвета (белого). |
void |
dispose() Освобождает системные ресурсы, используемые в данный момент этим |
abstract BufferCapabilities |
getCapabilities() Возвращает |
abstract Graphics |
getDrawGraphics() Создает контекст графики для буфера отрисовки. |
abstract void |
show() Делает следующий доступный буфер видимым, либо копируя память (blitting), либо изменяя указатель отображения (перелистывание). |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
BufferStrategy
public BufferStrategy()
Методы
getCapabilities
public abstract BufferCapabilities getCapabilities()
Возвращает BufferCapabilities для этого BufferStrategy.
- Возвращает:
- возможности буферизации этой стратегии
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), либо изменяя указатель отображения (перелистывание).
dispose
public void dispose()
Освобождает системные ресурсы, используемые в данный момент этим BufferStrategy и удаляет его из связанного компонента. После вызова этого метода getBufferStrategy вернет null. Попытка использования BufferStrategy после его удаления приведет к неопределенному поведению.
- С момента:
- 1.6
- См. также:
-
Window.createBufferStrategy(int),Canvas.createBufferStrategy(int),Window.getBufferStrategy(),Canvas.getBufferStrategy()
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.