Graphics compiler — Kivy v1.0.1-dev documentation

# Graphics compiler

Before rendering an `InstructionGroup`, we are compiling the group, in order to reduce the number of instructions executed at rendering time.

## Reducing the context instructions

Imagine that you have a scheme like this

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

The real instruction seen by the graphics canvas would be

    Color: change 'color' context to 1, 1, 1
    BindTexture: change 'texture0' to `button.png texture`
    Rectangle: push vertices (x1, y1...) to vbo & draw
    Color: change 'color' context to 1, 1, 1
    BindTexture: change 'texture0' to `button.png texture`
    Rectangle: push vertices (x1, y1...) to vbo & draw
    Color: change 'color' context to 1, 1, 1
    BindTexture: change 'texture0' to `button.png texture`
    Rectangle: push vertices (x1, y1...) to vbo & draw

Only the first `Color` and `BindTexture` are useful, and really change the context. We can reduce them to

    Color: change 'color' context to 1, 1, 1
    BindTexture: change 'texture0' to `button.png texture`
    Rectangle: push vertices (x1, y1...) to vbo & draw
    Rectangle: push vertices (x1, y1...) to vbo & draw
    Rectangle: push vertices (x1, y1...) to vbo & draw

This is what the compiler does in the first place, by flagging all the unused instruction with GI_IGNORE flag. As soon as a Color content change, the whole InstructionGroup will be recompiled, and maybe a previous unused Color will be used at the next compilation.

Note to any Kivy contributor / internal developer:

- All context instructions are checked if they are changing anything on the

cache - We must ensure that a context instruction are needed into our current Canvas. - We must ensure that we don’t depend of any other canvas - We must reset our cache if one of our children is another instruction group, because we don’t know if they are doing weird things or not.