Actualización de la textura con glTexImage2D (..) en OpenglES2
El código de inicialización crea una textura RGB de un solo color con 128×128 píxeles:
GLES20.glGenTextures ( 1, textureId, 0 ); GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, textureId[0] ); GLES20.glTexImage2D ( GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, bitmap.getWidth(), bitmap.getHeight(), 0,GLES20.GL_RGB, GLES20.GL_UNSIGNED_BYTE, byteBuffer );| GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, 0 );
Después de la inicialización tengo la textura adecuada y todo funciona bien. En algún punto tengo que hacer algunos cambios en mi textura o incluso reemplazarla completelly con otra imagen:
- Cómo salvar SurfaceTexture como bitmap
- ¿Cuántos dispositivos Android soportan GLSurfaceView.setPreserveEGLContextOnPause hoy?
- Android OpenGl 2.0 ES fuerza el reinicio del dispositivo
- Android NDK - OpenGL ES 2.0 - vinculación de la biblioteca
- Android Openg GL ES 2 dibujo grandes texturas lento
GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, textureId[0] ); GLES20.glTexImage2D ( GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, bitmap.getWidth(), bitmap.getHeight(), 0,GLES20.GL_RGB, GLES20.GL_UNSIGNED_BYTE, byteBuffer );| GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, 0 );
Pero glTexImage2D no realiza ningún cambio en la textura y no devuelve ningún error. Pero este código funciona correctamente en mi proyecto iOS, pero en el caso de Android no lo hace. Parece que no puedo usar glTexImage2D (…) dos veces con la misma textura, en otras palabras, la única manera de modificar mi textura es crear una nueva y borrar la antigua, pero ¿por qué funciona correctamente en iOS? ¿Qué tiene de malo mi código?
- Gestión adecuada de la memoria en OpenGL en dispositivos Android
- GlCreateShader y glCreateProgram fallan en android
- ¿Hay algún dispositivo Android con un tamaño de pantalla mayor que GL_MAX_TEXTURE_SIZE?
- Cómo forzar el modo de paisaje con NDK utilizando códigos C ++ puros
- ¿Por qué glReadPixels da resultados faltados en algunos dispositivos Android más antiguos?
- glClearColor no funciona correctamente (opengl android)
- Manera de reiniciar fondo de pantalla en vivo
- Android se congela en OpenGL | ES (la CPU puede estar vinculada.
Lo siento, fue culpa mía. Intenté llamar a la función glTexImage2D de otro hilo (no del hilo GL). Ahora todo funciona perfecto.
Creo que glTexImage2D () se utiliza para definir una textura y glTexSubImage2D () se utiliza para redefinir / actualizar una textura.
Es posible que tenga que cambiar a glTexSubImage2D () para su actualización de textura.