Класс 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, 2021, 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/17/docs/api/java.desktop/java/awt/image/BufferStrategy.html