5

Próbuję przesłać podgląd kamery do obiektu z teksturą powierzchni i renderować go na kwadracie. Mam uruchomiony kod dla GLES20, ale nie znalazłem nic dla 1.x. Zasadniczo to powinno działać tak, prawda?Android OpenGLES 1.x CameraPreview do 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); 

Plac zostanie narysowany, ale jest całkowicie biały. Nie otrzymuję glErrors ani innych wyjątków. Handler "onFrameAvailable" również zostaje wywołany. Jeśli korzystam z glTeximage z załadowaną bitmapą, jest ona poprawnie rysowana na kwadracie.

WSZELKIE pomysły? Dziękuję Ci!

Odpowiedz

7

Mam do czynienia z tym samym problemem. Może się mylę, ale wydaje się, że SurfaceTexture nie jest kompatybilny z GLES10. Tekstury powierzchni używa GL_TEXTURE_EXTERNAL_OES, a tym samym niestandardowy moduł cieniujący, który może używać tej tekstury ("#extension GL_OES_EGL_image_external: require").

Ponieważ glUseProgram (...) itp. Nie są dostępne w GLES10, nie możemy używać niestandardowych shaderów.

Jak powiedziałem, może się mylę ... powodzenia

EDIT: I wreszcie dostać się do pracy. Powinieneś użyć "gl.glEnable (GLES11Ext.GL_TEXTURE_EXTERNAL_OES);"

+0

Stary, twoja edycja sprawiła, że ​​zadziałało po 4 godzinach szukania odpowiedzi. Dzięki. – Mikle

+0

Dziękuję. Po prostu przeczytaj, nie można w tej chwili zweryfikować. Ponieważ oboje zgadzacie się, że to działa, zaznaczam to. –

Powiązane problemy