Table Of Contents
Framebuffer¶
Fbo (Frame Buffer Object) представляет собой что-то вроде оффскрин-окна. Вы можете активировать fbo для рендеринга в текстуру и использовать ваше fbo как текстуру для другого рисования.
Fbo действует как kivy.graphics.instructions.Canvas
.
Вот пример использования fbo для создания цветных прямоугольников:
from kivy.graphics import Fbo, Color, Rectangle
class FboTest(Widget):
def __init__(self, **kwargs):
super(FboTest, self).__init__(**kwargs)
# first step is to create the fbo and use the fbo texture on other
# rectangle
with self.canvas:
# create the fbo
self.fbo = Fbo(size=(256, 256))
# show our fbo on the widget in different size
Color(1, 1, 1)
Rectangle(size=(32, 32), texture=self.fbo.texture)
Rectangle(pos=(32, 0), size=(64, 64), texture=self.fbo.texture)
Rectangle(pos=(96, 0), size=(128, 128), texture=self.fbo.texture)
# in the second step, you can draw whatever you want on the fbo
with self.fbo:
Color(1, 0, 0, .8)
Rectangle(size=(256, 64))
Color(0, 1, 0, .8)
Rectangle(size=(64, 256))
Если вы измените что-либо в объекте self.fbo, оно будет автоматически обновлено. Канвас, на котором находится fbo, также будет автоматически обновлен.
Обновление содержимого FBO¶
Добавлено в версии 1.2.0.
Если контекст OpenGL потерян, то FBO также потерян. Вам нужно будет самостоятельно перезагрузить данные. Используйте Fbo.add_reload_observer()
, чтобы добавить функцию перезагрузки, которая будет вызываться автоматически при необходимости:
def __init__(self, **kwargs):
super(...).__init__(**kwargs)
self.fbo = Fbo(size=(512, 512))
self.fbo.add_reload_observer(self.populate_fbo)
# и загрузите данные сейчас.
self.populate_fbo(self.fbo)
def populate_fbo(self, fbo):
with fbo:
# .. поместите здесь ваши Color / Rectangle / ...
Таким образом, вы можете использовать тот же метод как для инициализации, так и для перезагрузки. Но это зависит от вас.
- class kivy.graphics.fbo.Fbo(*args, **kwargs)¶
Базовый класс:
kivy.graphics.instructions.RenderContext
Инструкция "with".
- Parameters
- clear_color: кортеж, значение по умолчанию (0, 0, 0, 0)
Определите цвет по умолчанию для очистки буфера кадра
- size: кортеж, значение по умолчанию (1024, 1024)
Размер буфера кадра по умолчанию
- push_viewport: логическое значение, значение по умолчанию True
Если True, то размер видового окна OpenGL будет установлен в размер буфера кадра и будет автоматически восстановлен при освобождении буфера кадра.
- with_depthbuffer: логическое значение, значение по умолчанию False
Если True, то буфер кадра будет выделен с буфером глубины.
- with_stencilbuffer: логическое значение, значение по умолчанию False
Добавлено в версии 1.9.0.
Если True, то буфер кадра будет выделен с буфером трафарета.
- texture:
Texture
, значение по умолчанию None Если None, то будет создана текстура по умолчанию.
Примечание
Использование и
with_stencilbuffer
иwith_depthbuffer
одновременно не поддерживается в kivy 1.9.0- add_reload_observer(callback)¶
Добавьте обратный вызов, который будет вызываться после того, как весь графический контекст будет перезагружен. Здесь вы можете повторно загрузить свои пользовательские данные в GPU.
Добавлено в версии 1.2.0.
- Parameters
- callback: функция (контекст) -> возврат None
Первый параметр будет самим контекстом
- bind()¶
Привяжите FBO к текущему контексту OpenGL. Привязка означает, что вы активируете буфер кадра, и все операции рисования будут выполняться внутри буфера кадра до вызова
release()
. Операции привязки/освобождения вызываются автоматически, когда вы добавляете графические объекты в него. Если вы хотите вручную управлять буфером кадра, вы можете использовать его так:self.fbo = FBO() self.fbo.bind() # выполните любую команду рисования self.fbo.release() # затем ваша текстура fbo доступна по адресу print(self.fbo.texture)
- clear_buffer()¶
Очистите буфер кадра с помощью
clear_color
.Вы должны связать буфер кадра самостоятельно перед вызовом этого метода:
fbo.bind() fbo.clear_buffer() fbo.release()
- clear_color¶
Цвет очистки в формате (красный, зеленый, синий, альфа).
- get_pixel_color(int wx, int wy)¶
Получите цвет пикселя с указанными координатами окна wx, wy. Возвращает результат в формате RGBA.
Добавлено в версии 1.8.0.
- pixels¶
Получите текстуру пикселей в формате RGBA только с беззнаковыми байтами. Начало изображения находится в нижнем левом углу.
Добавлено в версии 1.7.0.
- release()¶
Освободите буфер кадра (unbind).
- remove_reload_observer(callback)¶
Удалите обратный вызов из списка наблюдателей, ранее добавленный с помощью
add_reload_observer()
.Добавлено в версии 1.2.0.
- size¶
Размер буфера кадра в формате (ширина, высота).
Если вы измените размер, содержимое буфера кадра будет потеряно.
- texture¶
Верните текстуру буфера кадра