Цель: Я использую SurfaceTexture
для отображения предварительного просмотра камеры, и нужно рисовать на верхней поверхности, приобретая контекст GL от НДК. Я выбрал подход SurfaceTexture
, так как я могу избежать ручного управления буфером кадров камеры от java до NDK, чтобы сохранить некоторую производительность.GL контекст захватывая SurfaceTexture от НДК
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 в фоновом режиме.
Вопрос: Возможно ли вообще захватить контекст GL из NDK при использовании SurfaceTexture
? Возможно, мне нужно использовать на GLSurfaceView
, инициализировать контекст GL вручную из java-кода и захватить его из NDK?
Вы видели ответ Романа Гая (https://groups.google.com/d/msg/android-developers/U5RXFGpAHPE/IqHeIeGXhr0J) о работе с TextureView и получении контекста EGL? –