android OpenGLES 1.x CameraPreview 到 Surfacetexture

Posted

技术标签:

【中文标题】android OpenGLES 1.x CameraPreview 到 Surfacetexture【英文标题】:android OpenGLES 1.x CameraPreview to Surfacetexture 【发布时间】:2013-09-05 14:06:02 【问题描述】:

我正在尝试将相机预览发送到表面纹理对象并将其渲染在正方形上。我有 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);

正方形被绘制但完全是白色的。我没有收到 glErrors 或其他异常。 “onFrameAvailable”处理程序也被调用。 如果我使用带有加载位图的 glTeximage,它会正确绘制在正方形上。

有什么想法吗?谢谢!

【问题讨论】:

【参考方案1】:

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

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

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

编辑:我终于让它工作了。你应该使用“gl.glEnable(GLES11Ext.GL_TEXTURE_EXTERNAL_OES);”

【讨论】:

老兄,您的编辑是在搜索了 4 个小时后才起作用的原因。谢谢。 谢谢。刚读完,暂时无法验证。既然你们都同意它有效,我标记它。

以上是关于android OpenGLES 1.x CameraPreview 到 Surfacetexture的主要内容,如果未能解决你的问题,请参考以下文章

android openGL ES2 一切从绘制纹理開始

Android OpenGLES2.0——了解OpenGLES2.0

Android OpenGLES 滚动背景

Android上使用OpenGLES2.0显示YUV数据

使用 Android NDK 通过 openGLES2 渲染视频帧

Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合