OpenGL "Error de operación no válido" Después de glDrawElements función en el teléfono Android
No puedo ejecutar mi aplicación en mi teléfono, e I'v localizado el error, pero carecen de los conocimientos en la programación y en Inglés para repararlo. La ejecución de la aplicación en el emulador perfectamente, sin errores en el código ni en opengl. Sin embargo, en el teléfono todo va bien sin errores, pero no muestran elementos opengl que quiero dibujar. He añadido glGetError
casi everythere en mi código, y encontré el error 1282 generado después de glDrawElements
que es GL_INVALID_OPERATION
.
GL_INVALID_OPERATION
se genera si un nombre de objeto de búfer distinto de cero está enlazado a una matriz habilitada oa la matriz de elementos y el almacén de datos del objeto de búfer está asignado actualmente.
- Error de registro de vídeo de Android
- Seguridad de facturación InApp y invocación de métodos remotos
- ¿Cómo cambiar AndroidManifest en tiempo de ejecución?
- definición de la función de inicialización de clase en java
- Picasso no puede cargar imagen dentro del método onSuccess de StorageReference
GL_INVALID_OPERATION
se genera si glDrawElements se ejecuta entre la ejecución de glBegin y el glEnd correspondiente.
No tengo glBegin o glEnd en mi código, así que supongo que el problema está en mi indexbuffer. Abajo te presento todo lo que tengo con el indexbuffer.
private ShortBuffer _indexBuffer; public void onDrawFrame(GL10 gl) { FramesPerSecond.StartCounter(); gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer); gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer); for (int i = 1; i <= 10; i++) { gl.glLoadIdentity(); gl.glTranslatef(0.0f, -1f, -1.0f + -1.5f * i); gl.glRotatef(-_xAngle, 1f, 0f, 0f); gl.glRotatef(-_yAngle, 0f, 1f, 0f); gl.glDrawElements(GL10.GL_TRIANGLES, _nrOfVertices, GL10.GL_UNSIGNED_SHORT, _indexBuffer); Log.e("Warning", " error code " +gl.glGetError()); }
Código de búfer en mi función de inicialización de objeto:
short[] indeksai = new short[] { 0, 1, 3, 0, 2, 1, 0, 3, 2, 1, 2, 3, }; ByteBuffer ibb = ByteBuffer.allocateDirect(indeksai.length * 2); ibb.order(ByteOrder.nativeOrder()); _indexBuffer = ibb.asShortBuffer(); _indexBuffer.put(indeksai);
Y eso es básicamente todo lo que he hecho con este buffer.
Sobre la función surfaceCreated >>
public void onSurfaceCreated(GL10 gl, EGLConfig config) { Log.i(LOG_TAG, "onSurfaceCreated()"); gl.glMatrixMode(GL10.GL_PROJECTION); float ratio = _width / _height; gl.glOrthof(-1, 1, -1 / ratio, 1 / ratio, 0.01f, 100.0f); gl.glViewport(0, 0, (int) _width, (int) _height); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glEnable(GL10.GL_DEPTH_TEST); gl.glClearColor(0f, 0f, 0f, 1.0f); gl.glEnable(GL10.GL_CULL_FACE); gl.glFrontFace(GL10.GL_CCW); gl.glCullFace(GL10.GL_BACK); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_COLOR_ARRAY); initTriangle(gl, context); try { loadGLTexture(gl); } catch (IOException e) { Log.w(LOG_TAG, "Texture fail"); } gl.glEnable(GL10.GL_TEXTURE_2D); gl.glShadeModel(GL10.GL_SMOOTH); gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); gl.glClearDepthf(1.0f); gl.glEnable(GL10.GL_DEPTH_TEST); gl.glDepthFunc(GL10.GL_LEQUAL); gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); }
- El uso de 1.7 requiere la compilación con Android 4.4 (KitKat); Actualmente utilizando API 14
- Eliminar span cuando se cambia el texto dentro del intervalo en Android
- Detección del tamaño de un dedo de usuario en el toque
- ¿Cómo acceder a la base de datos sqlite existente en Android Emulator?
- ¿Cómo comprobar si el valor ya existe en la base de datos android sqlite?
- Cortar un cuadrado translúcido en una textura
- Error de HttpsURLConnectionImpl.getInputStream () en la plataforma Android
- ¿Cómo se puede utilizar una interfaz para diferentes tareas de fondo android?
Lo más probable es que esté habilitando GL_COLOR_ARRAY
pero nunca configurando el glColorPointer
. Trate de comentar el gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
línea.
- Cómo escribir un archivo en Android a la carpeta en bruto?
- Android – ProgressBar setVisibility to GONE no funciona