【发布时间】:2016-02-10 08:08:07
【问题描述】:
目的:
我正在使用SurfaceTexture 来显示相机预览,并且需要通过从 NDK 获取 GL 上下文来在表面上绘制。我选择了SurfaceTexture 方法,因为我可以避免相机帧缓冲区的手动从 java 传递到 NDK,以节省一些性能。
public class MainActivity extends Activity implements SurfaceTextureListener {
private Camera mCamera;
private TextureView mTextureView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTextureView = new TextureView(this);
mTextureView.setSurfaceTextureListener(this);
setContentView(mTextureView);
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mCamera = Camera.open();
Camera.Size previewSize = mCamera.getParameters().getPreviewSize();
mTextureView.setLayoutParams(new FrameLayout.LayoutParams(previewSize.width, previewSize.height, Gravity.CENTER));
try {
mCamera.setPreviewTexture(surface);
} catch (IOException t) {
}
mCamera.startPreview();
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
// Ignored, the Camera does all the work for us
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
mCamera.stopPreview();
mCamera.release();
return true;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
// Update your view here
}
我尝试过的:
我想SurfaceTexture 在内部使用 GL 功能来绘制上下文。从 NDK 获取默认显示失败并出现 BAD_DISPLAY 错误。
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
当然,我可以初始化一个新的 GL 上下文并进行我的绘图,但我仍然希望保持背景中从 java 代码显示的纹理。
问题: 使用 SurfaceTexture 时是否可以从 NDK 中获取 GL 上下文?
可能我必须在GLSurfaceView上使用,从java代码手动初始化GL上下文并从NDK获取它?
【问题讨论】:
-
您看过 Roman Guy 的 answer 关于使用 TextureView 和获取 EGL 上下文的内容吗?
标签: android opengl-es android-camera opengl-es-2.0