2.6.11. Other recommendations

Other recommendations for improving the efficiency of your applications are:

Use point sprites

The pixel processors in the Mali-55, Mali-200 and Mali-400 MP support point sprites. Therefore, use point sprites rather than triangles or quads for entities such as particles.

Use appropriate triangle dimensions

Avoid setting up long, thin triangles. The pixel processor always runs groups of four nearest neighbor fragments. Therefore, a strip that is one pixel wide takes as much time to process as a strip that is two pixels wide.

Using state changes

Avoid making redundant state changes, or changing state and then changing it back between draw calls. It can also be beneficial to group geometry with similar state together to reduce the number of state changes required.

Note

Minimizing state changes must be balanced against the advantages of front-to-back ordering, as recommended in Volume of data processed.

Clear the entire framebuffer

Always clear the entire framebuffer by calling glClear. Because of the way tiling works, using glClear is essentially a free operation. Clearing only a part of the buffer is inefficient both in terms of time and power consumption.

For example, partial clearing of the framebuffer might occur if you use scissoring to specify an area that does not cover the entire real framebuffer that was specified in EGL calls.

Note

If possible, clear all buffers, that is the color, depth, and stencil buffers, when you clear the framebuffer.

Minimize the number of draw calls

When you call glDrawArrays or glDrawElements, the graphics driver collects all current OpenGL ES states, textures and vertex attribute data. The driver processes these to generate appropriate commands for the graphics hardware to perform the specified draw operation. This process can take a significant amount of time, so if you perform many draw calls, the overhead associated with these can be the bottleneck of the rendering. This is particularly so on embedded systems, which typically have much less CPU power available than traditional desktop systems.

Attempt to reduce the number of draw calls to as few as possible. For example, if multiple objects are drawn with the same rendering parameters but using different textures, merge the textures into one large texture and adjust the texture coordinates accordingly.

The number of draw calls that can be performed depends on how the rendering states are changed between the calls. This is typically in the order of a few thousand calls per second.

Avoid using glFlush and glFinish

Do not call glFlush or glFinish unless you have no alternative. Use eglSwapBuffers to signal the end of rendering for a frame.

Copyright © 2007-2009 ARM. All rights reserved.ARM DUI 0363D
Non-Confidential