Spec-Zone.ru › OpenJDK 27

Класс BufferStrategy

java.lang.Object
java.awt.image.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
См. также:
  • Window
  • Canvas
  • GraphicsConfiguration
  • VolatileImage

Краткое описание конструкторов

BufferStrategy()
Модификатор Конструктор Описание
protected
Конструктор для вызова из подклассов.

Краткое описание методов

Модификатор и тип Метод Описание
abstract boolean contentsLost()
Возвращает значение, указывающее, был ли потерян буфер отрисовки с момента последнего вызова getDrawGraphics.
abstract boolean contentsRestored()
Возвращает значение, указывающее, был ли буфер отрисовки недавно восстановлен после потери и повторно инициализирован цветом фона по умолчанию (белым).
void dispose()
Освобождает системные ресурсы, используемые этим BufferStrategy, и удаляет его из связанного компонента.
abstract BufferCapabilities getCapabilities()
Возвращает BufferCapabilities для этого BufferStrategy.
abstract Graphics getDrawGraphics()
Создаёт графический контекст для буфера отрисовки.
abstract void show()
Делает следующий доступный буфер видимым, копируя память (перенося блоки) или изменяя указатель дисплея (переключая буферы).

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект другому объекту.
protected void finalize()
Устарело, подлежит удалению: этот элемент API будет удалён в одной из будущих версий.
Финализация устарела и подлежит удалению в одном из следующих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать до тех пор, пока он не будет разбужен, обычно посредством уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать до тех пор, пока он не будет разбужен, обычно посредством уведомления или прерывания, либо пока не истечёт заданный промежуток реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать до тех пор, пока он не будет разбужен, обычно посредством уведомления или прерывания, либо пока не истечёт заданный промежуток реального времени.

Подробное описание конструкторов

BufferStrategy

protected 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()
Делает следующий доступный буфер видимым, копируя память (перенося блоки) или изменяя указатель дисплея (переключая буферы).

dispose

public void dispose()
Освобождает системные ресурсы, используемые этим BufferStrategy, и удаляет его из связанного компонента. После вызова этого метода getBufferStrategy вернёт значение null. Попытка использовать BufferStrategy после его освобождения приведёт к неопределённому поведению.
Начиная с версии:
1.6
См. также:
  • Window.createBufferStrategy(int)
  • Canvas.createBufferStrategy(int)
  • Window.getBufferStrategy()
  • Canvas.getBufferStrategy()

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API