Transparencias

Al fin logré solucionar el problema con el blend de OpenGL. Antes el último color utilizado se mezclaba con la textura e incluso rellenaba las áreas que supuestamente debían ser transparentes. La solución es simple: solo tenía que habilitar blend con glEnable(GL_BLEND) pero no definir ninguna función de mezclado. No sé si será la forma correcta pero al menos me funciona.
Aún me quedan por resolver dos problemas muy enojosos, el renderizado de fuentes y una falla de segmentación al crear texturas a partir de una SDL_Surface, que por alguna razón sólo se produce cuando compilo con VC o gcc 4. En gcc 3 el siguiente código:

tmp=IMG_Load("default/dialog_back.png");
glBindTexture(GL_TEXTURE_2D, dialog_back); // 2d texture (x and y size)

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tmp->w, tmp->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, tmp->pixels);


produce una caída total del la aplicación en glTexImage2D.
Para las fuentes estoy intentando usar SDL_ttf y cachear el texto en una textura, pero no he logrado resultados por el momento.

Comentarios

  1. Es normal que pete ya que das por hecho que IMG_Load te devuelve una imagen en format RGBA. Tienes que cambiarle el formato antes.

    ResponderEliminar
  2. Pensaba que eso dependía del formato de la imagen. Tendré que investigar eso.

    ResponderEliminar

Publicar un comentario