Класс BufferStrategy
- Прямые известные подклассы:
Component.BltBufferStrategy, Component.FlipBufferStrategy
public abstract class BufferStrategy extends Object
BufferStrategy представляет механизм организации сложной памяти на конкретном Canvas или Window. Аппаратные и программные ограничения определяют, можно ли реализовать ту или иную стратегию буферизации и каким образом. Эти ограничения можно определить по возможностям GraphicsConfiguration, используемого при создании Canvas или Window. Следует отметить, что термины буфер и поверхность используются как синонимы: это область непрерывной памяти, расположенная либо в видеопамяти устройства, либо в системной памяти.
Существует несколько типов сложных стратегий буферизации, в том числе последовательная кольцевая буферизация и буферизация с копированием. Последовательная кольцевая буферизация (то есть двойная или тройная буферизация) встречается чаще всего: приложение выполняет рисование в одном заднем буфере, а затем за один шаг переносит его содержимое на передний (отображаемый) буфер — копированием данных или перемещением указателя видео. Перемещение указателя видео меняет буферы местами, так что первый буфер, в который выполнялось рисование, становится передним буфером, то есть тем, который в данный момент отображается на устройстве; этот процесс называется перелистыванием страниц.
В качестве альтернативы содержимое заднего буфера можно копировать, или переносить копированием, дальше по цепочке, вместо перемещения указателя видео.
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
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для вызова из подклассов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract boolean |
contentsLost() |
Возвращает значение, указывающее, был ли потерян буфер для рисования с момента последнего вызова getDrawGraphics. |
abstract boolean |
contentsRestored() |
Возвращает значение, указывающее, был ли буфер для рисования недавно восстановлен после потери и повторно инициализирован цветом фона по умолчанию (белым). |
void |
dispose() |
Освобождает системные ресурсы, используемые этим объектом BufferStrategy в данный момент, и удаляет его из связанного компонента. |
abstract BufferCapabilities |
getCapabilities() |
Возвращает BufferCapabilities для этого объекта BufferStrategy. |
abstract Graphics |
getDrawGraphics() |
Создаёт графический контекст для буфера рисования. |
abstract void |
show() |
Делает следующий доступный буфер видимым, копируя память (перенося изображение) или изменяя указатель дисплея (переключая буферы). |
Подробное описание конструкторов
BufferStrategy
protected BufferStrategy()
Подробное описание методов
getCapabilities
public abstract BufferCapabilities getCapabilities()
BufferCapabilities для этого объекта BufferStrategy.- Возвращает:
- возможности буферизации этой стратегии
getDrawGraphics
public abstract Graphics getDrawGraphics()
- Возвращает:
- графический контекст для буфера рисования
contentsLost
public abstract boolean contentsLost()
getDrawGraphics. Поскольку буферы в стратегии буферизации обычно имеют тип VolatileImage, они могут быть потеряны. Обсуждение потерянных буферов см. в VolatileImage.- Возвращает:
- Был ли потерян буфер для рисования с момента последнего вызова
getDrawGraphics. - См. также:
contentsRestored
public abstract boolean contentsRestored()
VolatileImage, они могут быть потеряны. Если поверхность была недавно восстановлена после потери с момента последнего вызова getDrawGraphics, может потребоваться перерисовка. Обсуждение потерянных буферов см. в VolatileImage.- Возвращает:
- Был ли восстановлен буфер для рисования с момента последнего вызова
getDrawGraphics. - См. также:
show
public abstract void show()
dispose
public void dispose()
BufferStrategy в данный момент, и удаляет его из связанного компонента. После вызова этого метода getBufferStrategy вернёт null. Попытка использовать BufferStrategy после его освобождения приведёт к неопределённому поведению.- Начиная с:
- 1.6
- См. также:
© 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/java/awt/image/BufferStrategy.html