The Kivy documentation reads so that for a rectangle with a texture created and blitted from a pixel array, like this:
pixels = bytearray([0x00, 0x00, 0x00] * (256 * 192))
texture = kivy.graphics.texture.Texture.create(size=(256, 192),
colorfmt='rgb')
texture.blit_buffer(pixels, colorfmt='rgb', bufferfmt='ubyte')
it can then be updated with an ask_update() call for whatever is the associated canvas.
The problem is that despite the blit_buffer() calls performs in no time, the following ask_update() seems to be very expensive in terms of performance, so, say, with the updating call in place FPS drops from about 8000 to 60 on my machine. To compare with Cairo, changing a cairo.ImageSurface's pixel array causes redrawing the image with no additional calls and seems to perform very fast.
The question is whether there's a faster way to redraw blitted pixels in Kivy.