Skip to content

Custom Sprite Batcher in LibGDX

mattdesl edited this page Mar 13, 2013 · 18 revisions

This is an advanced tutorial that will deal with shaders, meshes, camera matrices, texture handling, and various other concepts. Ensure you have read and understand the following before continuing:

Objective

As we know from previous tutorials, we can send float data to a shader with uniforms (vec2, vec3, etc). The problem is, however, that we need to flush the SpriteBatch before changing the uniform. Imagine each of our sprites require a different uniform value; this would lead to a lot of flushing, and it defeats the benefits of a SpriteBatch in the first place.

The solution is to use vertex attributes -- this allows us to send data to the shader per-vertex as opposed to per-batch. We already use vertex attributes to send RGBA colors per sprite, or texture coordinates per vertex. There are a number of situations where custom vertex data will prove useful, but for our cases let's use it for multi-texturing.

Theoretical Puzzle Game

Let's say we're developing a simple puzzle game. One option would be to pre-render all the masked pieces offline, in Photoshop or with a custom tool. Another option is to apply the masking in real-time, on the GPU. For the latter, we can use the same techniques discussed in Shader Lesson 4 to mask our puzzle photo.

Clone this wiki locally