android OpenGLES 1.x CameraPreview到Surfacetexture

J-S*_*J-S 5 opengl-es render-to-texture android-camera opengl-es-1.1

我正在尝试将相机预览发送到surfacetexture对象并将其渲染到正方形上.我有运行GLES20的代码,但没有为1.x找到任何东西.基本上它应该像这样工作,对吧?

// 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);
Run Code Online (Sandbox Code Playgroud)

广场被绘制但是完全是白色的.我没有收到glErrors或其他例外."onFrameAvailable"处理程序也会被调用.如果我将glTeximage与加载的位图一起使用,则会在正方形上正确绘制.

有任何想法吗?谢谢!

Nic*_*las 7

我面临着同样的问题.也许我错了,但似乎SurfaceTexture与GLES10不兼容.表面纹理使用GL_TEXTURE_EXTERNAL_OES,因此它是一个能够使用此纹理的自定义片段着色器("#extension GL_OES_EGL_image_external:require").

由于glUseProgram(...)等在GLES10中无法使用,我们无法使用自定义着色器.

正如我所说,也许我错了......祝你好运

编辑:我最终得到它的工作.你应该使用"gl.glEnable(GLES11Ext.GL_TEXTURE_EXTERNAL_OES);"