I'm implementing some native 2D-draw functions in my graphics engine for android, but now there's another question coming up, when I observe the performance of my program.
At the moment I'm implementing a drawLine/drawImage function. In summary, there are following different values for drawing each different line / image:
the color
the alpha value
the width of the line
rotation (only for images)
size/scale (also for images)
blending method (subrtract, add, normal-alpha)
Now, when an imageLine is drawn,
I put the CPU-calculated vertex-positions and uv-values for 6 vertices (2 triangles), into a Floatbuffer and draw it immediately with drawArrays, after passing information for drawing (color,alpha, etc.) via uniforms to the shader. When I draw an image, the pre-set VBO is directly drawn after passing information.
The first fact I recognized, is: of course drawing Images is much faster, than imagelines (beacuse of VBOs), but also: I cannot pre-put vertex-data into a VBO for imageLines, because imageLines have no static shape like normal images (varying linelength, varying linewidth and the vertex positions of x1,y1 and x2,y2 change too often)
That's why I use a normal Floatbuffer, instead of a VBO.
So my question is: What's the best way for managing images, and other 2D-graphics functions. For me it's some kind of important, that the user of the engine is able to draw as many images/2D graphics as possible, without loosing to much performance.
You can find the functions for drawing images, imagelines, rects, quads, etc. here:
https://github.com/Chrise55/LLama3D/blob/master/Llama3DLibrary/src/com/llama3d/object/graphics/image/ImageBase.java
Here an example how it looks with many images (testing artificial neural networks), it works fine, but already little bit slow with that many images... :(