2012-10-11 155 views
5

Obtengo texturas blancas en la variante de la galaxia de Samsung, pero en los otros teléfonos que probé las texturas funcionan bien. Así que mi pregunta es ¿cuál es el sospechoso habitual que causa tal comportamiento? ¿La variante galaxia tiene algún hardware especial y le falta algo?Android opengl texturas blancas en la variante Samsung Galaxy

Mi código de la textura de carga es este

GLuint texture; 
    glGenTextures(1, &texture); 
    glBindTexture(GL_TEXTURE_2D, texture); 

    glPixelStorei(GL_UNPACK_ALIGNMENT, 2); 

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

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE); 

    if(alpha)glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) image_data); 
    else glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid*) image_data); 

Y el dibujo está sucediendo como de costumbre con GL_TRIANGLES

* No tengo el dispositivo real frente a mí, así que no puedo hacer glGetError

+0

¿Se puede garantizar que las texturas tengan un tamaño de Potencia de 2? Si obtiene sus datos de una fábrica de mapas de bits, puede escalarlos con la densidad de la pantalla, lo que provocará que las imágenes de origen de PO2 se conviertan en NPO2. – Tim

+0

Sí, las texturas son pot y no las obtengo de Bitmap Factory. De hecho, las estoy cargando desde C++ (accediendo al apk) pero no creo que haya problema, ya que solo las cosas de C++ no se abren, si el problema estaba ahí. lo tendría en todos los dispositivos. – SteveL

+1

¿Son todas las texturas blancas o solo algunas de ellas? ¿Son todos RGBA, RGB o mixtos? ¿Por qué usas una alineación de desempaquetado de 2? – Tim

Respuesta

4

Como es OpenGL ES 1.0, también debe llamar al

glEnable(GL_TEXTURE_2D); 

, que de lo contrario no funciona en OpenGL ES 2.0, donde el sombreador dice qué tipo de textura se está leyendo (bueno, en realidad es un error).

Llamar a glTexParameterf() y glTexEnvf() me parece un poco extraño, usaría glTexParameteri() y glTexEnvi() en su lugar (los valores pasados ​​son enums, que son enteros, no flotantes). Pero eso no debería causar errores.

Otra cosa es el tamaño máximo de la textura (ya dijiste que es POT). ¿La textura es grande por casualidad? Algunos dispositivos pueden tener un límite máximo de tamaño de la textura de 512 por 512 píxeles.

La alineación de desembalaje no debería tener un gran efecto en general. Debería ser 1 si almacena sus datos RGB en 3 bytes, o 4 si almacena RGB y RGBA como una palabra doble (= 4 bytes). Si especifica una mala alineación, me imagino que la textura está distorsionada (RGB o skew scanline), pero en general no debería terminar en blanco. Por otro lado, si el controlador rechazó esta alineación de desempaquetado, podría dejar la textura en blanco y generar un error GL. Vea si lo hace.

Otro factor son las coordenadas de la textura. Algunos dispositivos tienen un número pequeño de bits en los interpoladores texcoord, y la especificación de grandes coordenadas de textura (por ejemplo, -10000, +10000 en un terreno cuádruple) puede dar como resultado fallas técnicas gráficas. Esto es en su mayoría indocumentado y muchos dispositivos tienen problemas con él.

Siempre fue útil para mí hacer una textura verdosa brillante de 8x8 (no 0x00ff00, por ejemplo, 0x8AC43C es mucho más fácil de detectar en casos de conversión a escala de grises o de alguna manera solo se usa un componente). Esta textura debe aplicarse luego en un cuadrángulo "pequeño" (uno que esté completamente en la pantalla y lo suficientemente grande para ser visible) con texcoords en el rango [0-1].

+0

1) Estoy habilitando GL_TEXTURE_2D cada vez antes de dibujar 2) No creo que eso esté causando el problema 3) I tienen el mismo problema en texturas pequeñas como 64 * 64 4) Como dices que esto no es una razón para las texturas blancas 5) no, solo dibujo texturas cuadradas con <= 1 texcoords 6) no entendí eso :) .Gracias por el respuesta, fue la más completa – SteveL

+0

6) es lo que hago si tengo problemas con algo simple que no funciona: implemente una prueba simple que debería funcionar en todas partes. Es una pena que ninguno de ellos resuelva su problema. Si llega a resolverlo, díganos cuál fue el problema. Buena suerte ... –

Cuestiones relacionadas