opengl-es - android OpenGLES 1.x CameraPreview 到 Surfacetexture

标签 opengl-es android-camera render-to-texture opengl-es-1.1

我正在尝试将相机预览发送到表面纹理对象并将其渲染在正方形上。我已经运行了 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 与加载的位图一起使用,它会正确绘制在正方形上。

有什么想法吗?谢谢!

最佳答案

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

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

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

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

关于opengl-es - android OpenGLES 1.x CameraPreview 到 Surfacetexture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18573638/

相关文章:

javascript - WebGL/JavaScript : Object transformations with multiple objects

ios - 无法使用 Swift 工作 GLKView

android - 当用户移动相机时,有哪些 Android 相机 api 参数优化可以有效拍照?

android - 有没有办法找出哪个应用程序锁定了相机?

android - 在风景中将 Camera Activity 旋转 180 度会导致反转相机预览

c++ - 我的渲染图像和纹理渲染在宽度和高度上都丢失了一个像素

android - Android 上的硬件加速 H.264/HEVC 视频解码为 OpenGL FBO 或纹理

iphone - 使用 openGL 捕获屏幕截图

xna - 我怎样才能保留渲染目标结果,使它们成为非 volatile 的?

c++ - GPU 上的图像处理 - 滤镜的连续着色器 - FBO