Версия 2.1.0

Quick search

Компилятор графики

Перед визуализацией InstructionGroup мы компилируем группу, чтобы уменьшить количество инструкций, выполняемых во время визуализации.

Уменьшение контекстных инструкций

Представьте, что у вас есть схема, подобная этой:

Color(1, 1, 1)
Rectangle(source='button.png', pos=(0, 0), size=(20, 20))
Color(1, 1, 1)
Rectangle(source='button.png', pos=(10, 10), size=(20, 20))
Color(1, 1, 1)
Rectangle(source='button.png', pos=(10, 20), size=(20, 20))

Реальные инструкции, видимые холстом графики, будут следующими:

Color: изменить контекст 'color' на 1, 1, 1
BindTexture: изменить контекст 'texture0' на `button.png texture`
Rectangle: добавить вершины (x1, y1...) в vbo и нарисовать
Color: изменить контекст 'color' на 1, 1, 1
BindTexture: изменить контекст 'texture0' на `button.png texture`
Rectangle: добавить вершины (x1, y1...) в vbo и нарисовать
Color: изменить контекст 'color' на 1, 1, 1
BindTexture: изменить контекст 'texture0' на `button.png texture`
Rectangle: добавить вершины (x1, y1...) в vbo и нарисовать

Полезными и действительно изменяющими контекст являются только первая Color и BindTexture. Мы можем уменьшить их до:

Color: изменить контекст 'color' на 1, 1,

1
BindTexture: изменить контекст 'texture0' на `button.png texture`
Rectangle: добавить вершины (x1, y1...) в vbo и нарисовать
Rectangle: добавить вершины (x1, y1...) в vbo и нарисовать
Rectangle: добавить вершины (x1, y1...) в vbo и нарисовать

Это то, что делает компилятор в первую очередь, помечая все неиспользуемые инструкции флагом GI_IGNORE. Как только изменяется содержимое Color, вся группа инструкций будет перекомпилирована, и ранее неиспользуемый Color может быть использован для следующей компиляции.

Примечание для участника Kivy / внутреннего разработчика:

  • Все контекстные инструкции проверяются на предмет изменений в кеше.

  • Мы должны убедиться, что контекстная инструкция нужна для нашего текущего холста.

  • Мы должны убедиться, что мы не зависим от другого холста.

  • Мы должны сбрасывать наш кеш, если одним из наших детей является другая группа инструкций, потому что мы не знаем, может ли она делать что-то странное или нет.