Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenGL ES 2D - z-ordering, depth buffer vs drawing in order

I'm completely new to OpenGL so sorry if it's a silly question. Also no idea if it makes a difference, just in case, I'm using OpenGL ES 1.1.

Currently I'm drawing sprites in order of texture, as I've read it's better for performance (makes sense). But now I'm wondering whether that was the right approach because I need certain sprites to be in front of others regardless of texture.

As far as I'm aware, my options for z-ordering would be either to enable the depth buffer and use that, or to switch the drawing order so the sprites are drawn in the order of a z value.

I've read that the depth buffer can be a performance hit, but so would changing the order. Which should I do?

like image 873
Dan2552 Avatar asked Jan 18 '12 16:01

Dan2552


1 Answers

The short answer is, sort the sprites.

It sounds like you're creating something that's really 2d based, and while a z-buffer can be a very useful tool, it can be an impressive performance hit if the hardware doesn't support it, and if you're not actually using 3d objects that may be intersecting one another, it doesn't make a lot of sense to me.

In addition, if you have any sprites that are partially transparent, i.e. have pixels with an alpha value that isn't 0 or 255 (or 0.0 or 1.0 if using floating point) then you have to sort anyway.

As a side note, I believe that the performance lost when changing "sprites" only occurs when switching out surfaces, and only rarely. One way to help mitigate this problem is to put as many different sprites in one image as you can, on a grid, and use little pieces of your surfaces as sprites.

like image 68
Mike Buland Avatar answered Oct 24 '22 21:10

Mike Buland