Before you start optimizing something random, I'd suggest you test whether that is the actual issue.
Buffer update:
Before you focus on buffer updates, try rendering without updating the buffers (just initialize it the first frame), if you get the exact same performance, you won't benefit of updating the buffer in "better" ways.
Fillrate:
Reduce the size of the quads to 1/2 (yes, that will look wrong, but it's for testing only), if that speeds up the rendering significantly, you're fillrate limited.
Texture sampling:
Hardcode your fragment program to only output one constant color, no texture sampling.
Alphatest:
you seem to have some alphatest/color key/pixel clip/pixel kill enabled. Disable it and check the perf (eventually you render the whole scene with that enabled, which might disable significant optimizations on the GPU).
On 2/22/2018 at 4:40 PM, EddieK said:
I'm really out of ideas here, it seems like I tried everything and I still can't get past 3000 triangles without the framerate dropping below 60. I read somewhere that MALI-400 is capable of 30 million polygons per second and I am getting only around 500,000.
There are many different "MALI-400". Beside polygon count, they have other limitations, e.g. they manage to render 210MPixel/s - 2000MPixel/s, that's 3.5MPixel/frame - 33MPixel/frame. Your screenshot is 2.3MPixel, hence you can afford an overdraw of 1.5x - 14x, which is not much if you add all the UI and overlaying sprites ->If you figure out that fillrate is the issue, maybe it would be enough to render your pixel art into a way lower resolution initially and just upscale it at the end.