Table Of Contents
Компилятор графики¶
Перед визуализацией 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 / внутреннего разработчика:
Все контекстные инструкции проверяются на предмет изменений в кеше.
Мы должны убедиться, что контекстная инструкция нужна для нашего текущего холста.
Мы должны убедиться, что мы не зависим от другого холста.
Мы должны сбрасывать наш кеш, если одним из наших детей является другая группа инструкций, потому что мы не знаем, может ли она делать что-то странное или нет.