我正在尝试将“新相机框架”Camera2的相机流转换为OpenGL纹理,但图像保持黑色 .
我正在使用Xamarin(但Java应该非常相似),我正在使用NDK进行本机渲染 . 所以我得到了一个创建OpenGL-ES上下文的GLSurfaceView,我可以从C渲染东西 .
而不是将TextureView的SurfaceTexture作为目标添加到CaptureRequestBuilder我创建了一个带有新纹理句柄的新SurfaceTexture .
// C++
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &m_TextureHandle);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, m_TextureHandle);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);
// C# (or Java)
_SurfaceTexture = new SurfaceTexture(m_TextureHandle);
_SurfaceTexture.FrameAvailable += SurfaceTextureOnFrameAvailable;
最后一行注册传入帧 . 在这里,我只是调度到我的渲染线程并调用:
_SurfaceTexture.UpdateTexImage();
我错过了一个重要的步骤吗?我也尝试使用弃用的相机api,结果相同 .
谢谢凯