En OpenGL ES para Android, ¿qué método sería mejor para dibujar un ‘contenedor’ para una barra de hechizos?

No optimices previamente. Su dispositivo móvil puede dibujar muchos triángulos, usar los que necesita para hacer lo que necesita hacer, y luego preocuparse de que funcione más rápido cuando funciona.

Me parece que te preocupas por lo que es eficiente cuando todavía estás tratando de descubrir qué estás haciendo.

No es útil, concéntrate en hacer que tu código haga lo que quieres que haga. Si es lento cuando funciona, descubres qué parte debe hacerse más rápido para que funcione.

Además, si la forma correcta de dibujar en la pantalla es su atraco, tal vez debería considerar usar una herramienta de nivel superior para hacer su juego. Realmente no necesitas operar al nivel de OpenGL para hacer una barra de habilidades con botones.

Editar:

Ah, y para asegurarme de responder a tu pregunta. Si nada necesita ser realmente transparente, primero dibuje las capas posteriores y luego dibuje sobre ellas. Está bien dibujar un solo poli para el contorno negro púrpura, el púrpura, luego el contorno negro interno y luego el blanco.

Si es transparente, bueno, entonces eres un masoquista o algo así. Use una textura alfa en lugar de tratar de construirla a partir de piezas.

Implementé algo similar para un juego móvil en tiempo real. Es posible que desee responder algunas preguntas más para determinar su solución:

  1. ¿Qué tan dinámico es? ¿Es esto una actualización por cuadro, por minuto, por nivel? Es decir, un personaje gana un punto de habilidad cuando sube de nivel, o esta es una barra regenerativa que se llena con el tiempo.
  2. ¿Cuántos hay? ¿Hay uno, diez, cientos de estos en la pantalla?

En mi escenario particular, había 24 barras de este tipo en la pantalla, y cada una necesitaba actualizarse de forma independiente con diferentes% de relleno.

Si solo tiene 5 cuadrados, puede dibujar 5 texturas en la CPU (incluida la barra morada y cualquier detalle necesario) y seleccionar entre ellos. Esta sería la solución de ejecución más barata y más precomputación. 2 triángulos, 1 muestra de textura por píxel.

Definitivamente de acuerdo con Daniel en no preoptimizar. Corrimos con una solución ingenua hasta que quedó claro que era un cuello de botella.

Para la opción 1, necesita 4 vértices y 2 traingles, 1 textura
– Rasteriza cada píxel

Para la opción 2, necesita 8 vértices y 6 triángulos, 2 texturas (1 para el centro, 1 para las esquinas)
– Rasteriza solo los píxeles necesarios.

Personalmente, iría con la opción 1 porque su uso mínimo de espacio, y son solo 2 triángulos, mantiene el código simple. Mientras que tendremos que dibujar 6 triángulos para la otra opción. Las GPU son lo suficientemente rápidas para distribuir los píxeles y no veo mucho problema con eso.