Spec-Zone.ru › OpenJDK 21

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

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

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()

© 1993, 2023, 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/21/docs/api/java.desktop/java/awt/image/BufferStrategy.html

Spec-Zone.ru

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