I notice that COLOR_3 and COLOR_4 constants both use COLOR as there base. This means you can't just check (vertexFormat & GeometryArray.COLOR_3 != 0) as this will catch COLOR_4 as well.
Seems like most code uses this check:
(vertexFormat & GeometryArray.COLOR_4) == GeometryArray.COLOR_3)
to check for color3 verses:
if ((vertexFormat & GeometryArray.COLOR_4) == GeometryArray.COLOR_4)
for color 4.
I've discovered 2 places where a check is assuming my first idea would work:
CompressionStream.java line 435
I know this path fails as I'm playing with the GeometryCompression currently.
GeometryInfoGenerator has a few references that seem suspect but I'm not positive. Line 507 maybe.
For the CompressionStream I have a fix locally. Would you like me to file an issue and/or patch?
Is it documented someplace that you can't just do what I did? Users might also make this mistake if they rip apart a GeometryArray.