Tengo una aplicación que he estado jugando repetidamente en Android, usa opengl-es.Android Opengl-es cargando un no poder de 2 textura
Actualmente Cómo cargo texturas de un mapa de bits, así:
//Load up and flip the texture - then dispose the temp
Bitmap temp = BitmapFactory.decodeResource(Deflecticon.getContext().getResources(), resourceID);
Bitmap bmp = Bitmap.createBitmap(temp, 0, 0, temp.getWidth(), temp.getHeight(), flip, true);
temp.recycle();
//Bind the texture in memory
gl.glBindTexture(GL10.GL_TEXTURE_2D, id);
//Set the parameters of the texture.
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
//On to the GPU
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
La cuestión obvia es que la textura que estoy usando tiene que ser una potencia de 2. Por el momento estoy pre-edición de la texturas en photoshop para ser un poder de 2 y simplemente tienen bordes vacíos. Sin embargo, esto es un poco tedioso y quiero poder cargarlos tal como están. Reconocer que no son un poder de 2 y cargarlos en una textura que sea.
Sé que podría escalar el mapa de bits para convertirme en una potencia de 2 tamaños y simplemente estirar la textura, pero no deseo estirar la textura y en algunos casos podría querer poner varias texturas en un "atlas".
Sé que puedo usar glTexSubImage2D() para pegar en la textura los datos que deseo en el origen que deseo. ¡Esto es genial!
Sin embargo, no sé cómo en Android para inicializar una textura sin datos?
En esta pregunta previously asked la sugerencia fue llamar a glTexImage2D() sin datos y luego llenarlo.
Sin embargo, en Android cuando llamas "GLUtils.texImage2D (GL10.GL_TEXTURE_2D, 0, bmp, 0);" usted no especifica un ancho/alto. Lo lee del mapa de bits que supongo.
¿Cuál es la mejor manera de hacerlo? ¿Puedo crear un nuevo mapa de bits con la potencia correcta de 2 tamaños solo en blanco y sin rellenar con ningún dato y usar esto para inicializar la textura y luego pegarla con subimágenes? ¿O debería hacer un nuevo mapa de bits de alguna manera para copiar los píxeles que quiero (no estoy seguro si puedes hacer esto fácilmente) en este nuevo mapa de bits (dejando bordes) y luego simplemente usar esto?
Editar: Aclaró que estoy usando OpenGL.
No hay muchos, solo esperamos poder cambiarlos en una fecha posterior y hace que sea más fácil si el cambio de tamaño se hace muy bien! Este método dice que toma un subconjunto del no POTBitmap. ¿Significa esto que si el mapa de bits del subconjunto es más pequeño que el especificado xSize e ySize tendría bordes en blanco? ¿O lo estiraría? (Experimentaría pero, lamentablemente, no en mi PC de codificación). – iexus
Los mapas de bits no deben estirarse a menos que se arrojen a un método createScaledBitmap. El espacio restante estará vacío. – AedonEtLIRA
Lo siento por la respuesta tardía, he estado saliendo con otras cosas, sin embargo, llegué a implementar esto y no funciona a través de este método. No se puede sub mapa de bits en un mapa de bits con un tamaño más grande que la fuente que parece ... Ahora estoy un poco perdido. – iexus