Hi!
I am developing UI application for embedded system running on Mali-400 GPU.
So far I have stumbled with following strange behavior: glDrawElements works differently if called with
different parameters.
Scenario: 8 vertices, 12 indices describing 2 rectangles - dark grey and red above it.
1. Variant 1:
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, 0);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, (const GLushort*)(0) + 6);
only dark gray triangle is drawn - where is the red triangle???
2. Variant 2:
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, (const GLushort*)(0) + 6);
only dark gray rectangle is drawn (which is expected) - but where is red triangle???
3. Variant 3:
glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_SHORT, (const GLushort*)(0));
both dark and red rectangles are drawn (which is expected result)
Why second glDrawElements call in variants 1 and 2 does not produce anything on screen?
Is it something related to internal pipeline optimizations or am I completely missing something here?
I have checked the same code on another device which is running on PowerVR GPU - everything is
fine there, no questions, that is why I came here to Mali support forums.
Executing grep --binary-files=text REVISION libMali.so on libMali shows some entries of REVISION=467.
I was able to create a reproducible program (for Android) which demonstrates those cases.
All those described scenarios are in jniexports.c:render of attached archive (lines 261-276).