Hola a todos:
Estoy intentando colocar un color a una superficie creado con
SDL_CreateRGBSurface
y tengo que pasarle los parámetros Uint32 Rmask, Uint32 Gmask, Uint32Bmask, Uint32 Amask. El problema es que no se que es lo que tengo que poner para que me use un color. Pongo esto:
rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x000000ff;
y me sale el cuadrado en negro. Si cambio lo que pone ahí, siempre me sale en negro, así que no se como usarlo.
¿alguien me puede ayudar?
gracias a todos
Segun he visto por google puede que tengas problemas con esto:
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
static const Uint32 r_mask = 0xFF000000;
static const Uint32 g_mask = 0x00FF0000;
static const Uint32 b_mask = 0x0000FF00;
static const Uint32 a_mask = 0x000000FF;
#else
static const Uint32 r_mask = 0x000000FF;
static const Uint32 g_mask = 0x0000FF00;
static const Uint32 b_mask = 0x00FF0000;
static const Uint32 a_mask = 0xFF000000;
#endif
big endian y little endian definen el orden de los bits dentro de la memoria. saludos
si ya, yo tb lo he visto, pero no se como utilizarlo. Yo lo que creo es que
r_mask es el valor de color rojo
g_mask del verde
b_mask el azul
Supongo que poniendo los valores RGB, la superficie que se crea es de ese color.
La verdad que no se si lo que acabo de poner es verdad, pq no entiendo exactamente para que sirve.
El color RGB del rojo (en HTML) por ejemplo es el FF0000
Alguien podría poner un ejemplo de como sería el rojo utilizando la función SDL_CreateRGBSurface???
gracias
No tengo idea de SDL, mirando en Google llego a la conclusión de que la superficie siempre va a salir negra, y que las máscaras de color están ahí por el tema de la ordenación de bytes y componentes RGB dentro de cada palabra de 32bits.
En OpenGL las texturas son RGBA, por eso en el ejemplo de Minos(que es el de la ayuda de SDL) se hace de esa manera. Pero a alguien le puede interesar alterar el orden de los bytes para cualquier cosa.. así que esa será la razón de ser de esos parámetros.
Para pintar la superficie accederias al miembro ->pixels de SDL_Surface*, sin olvidar de hacer el lock/unlock si es una superficie en memoria hardware.
...
es poco claro lo que quieres hacer pero bueno tratemos de entender
si lo que quieres es pintar una surface con un color, bueno puedes hacerlo con putpixel, pero SDL trae una funcion que te puede simplificar la vida
SDL_FillRect
http://sdldoc.csn.ul.ie/sdlfillrect.phpesa es su documentacion a mi parecer si eso es lo que quieres esta mas que claro como usarla
suerte
No conozco el sdl, pero supongo que una surface es como las de dx, o un canvas de windos, un lugar donde puedes dibujar, y rmask, bmask y mask en general es la mascara para cada color (solo sirven para definir el orden de los colores, la cantidad de bits por colores ( antes habia mask y shift (mascara y desplazamiento) ) ). No entiendo como puede andar sin el shift pero bueno (talvez la funcion los calcule automaticamente).