cancel
Showing results for 
Search instead for 
Did you mean: 

Partial Frame Buffer (4.15) maximum transmitted lines

ebray
Associate II

I'm using partial frame buffers with CubeIDE 1.5.0 and TouchGFX 4.15. I've found that when updating large portions of the screen, the function touchgfxDisplayDriverTransmitBlock is never called with a height larger than 20 lines, regardless of the frame buffer size. For instance, my display is 320 x 480 and I've configured 2 RGB888 buffers at 115200 bytes each. Each buffer can hold 120 lines of pixels. However, no update blocks with more than 20 lines are generated. I'm wondering why this would be the case.

3 REPLIES 3
Martin KJELDSEN
Chief III

The Partial FrameBuffer strategy in TouchGFX respects the rendering mechanisms of TouchGFX, meaning, you're not transferring the entire framebuffer at any point in time. You're only transmitting invalidated areas. So, the first time the GRAM on your display would be updated with the entire contents of the framebuffer blocks, but subsequently you may see only small updates to stay effecient.

The call to transmit a block comes from:

void TouchGFXGeneratedHAL::flushFrameBuffer(const touchgfx::Rect& rect)

So you should be able to map the coordinates from the Rect to what your Transmit function is asked to do.

/Martin

Guit32010
Associate III

I also noticed that the height is limited to 20 rows. I get multiple Calls from flushFrameBuffer. My allocated block is big enough for the invalidated space, but instead the Engine is limiting it to 20 lines and ends up splitting it into two calls of flushFrameBuffer. Why is it 20? Can I set this somewhere? Is there documentation on how this works?

IPiSw.1
Associate II

Yes, same problem here.

Lcd 320*240 pixels and 2 bytes/pixel.

This is a total of 320*240*2 = 150kB.

TouchGFX 4.17:

Partial buffer strategy.

3 blocks.

40kB/block.

On init (total area of LCD is invalid) TouchGFX could update the LCD in 150/40 is 4 steps.

But TouchGFX needs 12 steps and each step was 320*20 pixels (20 lines).

That makes a total of 12 * 320*20 pixels = 320*240 pixels.

TouchGFX does not update more than 20 lines per partial buffer.

It uses 320*20*2 bytes(=12.5kB) per partial buffer.

I allocated 40kB per partial buffer.