RGBA8 a GXColor

Estoy trabajando en el subsistema de 2D del Revolution Engine, mas adelante os comentare mas detalladamente como funciona, pero por ahora os digo que utilizo GX mas rapido que GRRLib 3, lo que convierte al motor en una buena opcion a la hora de desarrollar tambien en 2D. La pregunta es la siguiente: ¿Cual es la forma mas rapida (lease optimizada) de transformar un u32 con informacion RGBA8 a GXColor? Me vendria bien saber como lo hariais vosotros, extraeriais las componentes una a una para pasarlas a los campos del GXColor?
Yo lo haría así:

No estoy seguro de como va el orden de los colores en RGBA, pero supongo que se ordenan de izquierda a derecha y ocupan 32 bits, ¿no? (en bits por color: RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA)


RGBA A; #32 bits izq-derecha
GXColor B; # la estrcutura tb ocupa 32 bits, y sí que se ordena RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA en memoria

Entonces basta con B=(GXColor) A; Un casting a secas.

En algún sitio leí que uno era bigendian y otro little endian, así que si es necesario hacer un swap para cada componente, hay que sacarlo de uno en uno:

B=(GXColor)((A<<24)|(A<<8&0x00FF0000)|(A>>8&0x0000FF00)|(A>>24))

Creo que con eso vadría, échale un vistazo al número de bits que estoy moviendo ya que lo he escrito un poco rápido.
1 respuesta