Ich versuche, die Kameravorschau an ein Oberflächentexture-Objekt zu senden und es auf einem Quadrat zu rendern. Ich habe laufenden Code für GLES20 aber fand nichts für 1.x. Grundsätzlich sollte es so funktionieren, oder?Android OpenGLES 1.x CameraPreview zu Surfacetexture
// setup texture
gl.glActiveTexture(GL10.GL_TEXTURE0);
gl.glGenTextures(1, textures, 0);
gl.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textures[0]);
gl.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, ...);
...
// setup surfacetexture object
surface = new SurfaceTexture(textures[0]);
surface.setOnFrameAvailableListener(this);
// setup camera
mCamera = Camera.open(0);
Camera.Parameters param = mCamera.getParameters();
List<Size> psize = param.getSupportedPreviewSizes();
//find previewsize to match glsurface from renderer
param.setPreviewSize(psize.get(i).width, psize.get(i).height);
mCamera.setParameters(param);
// set the texture and start preview
mCamera.setPreviewTexture(surface);
mCamera.startPreview();
// in the "onFrameAvailable" handler, i switch a flag to mark a new frame
updateSurface = true;
// and in the renderloop i update and redraw
if (updateSurface) {
surface.updateTexImage();
updateSurface = false;
}
gl.glActiveTexture(GL10.GL_TEXTURE0);
gl.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textures[0]);
// Draw square
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBufferFloor);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length/3);
Das Quadrat wird gezeichnet, ist aber komplett weiß. Ich erhalte keine Fehlermeldungen oder andere Ausnahmen. Der "onFrameAvailable" -Handler wird ebenfalls aufgerufen. Wenn ich glTeximage mit einer geladenen Bitmap verwende, wird es korrekt auf dem Quadrat gezeichnet.
ANY Ideen? Vielen Dank!
Alter, Ihre Bearbeitung war, was es nach 4 Stunden der Suche nach der Antwort funktioniert. Vielen Dank. – Mikle
Danke. Lies es einfach, kann es im Moment nicht bestätigen. Da Sie beide zustimmen, dass es funktioniert, flagge ich es. –