Xamarin Android Camera2-OpenGL 纹理预览
Xamarin Android Camera2-Preview by OpenGL Texture
我正在尝试将 "new camera framework" Camera2 的相机流导入 OpenGL 纹理,但图像保持黑色。
我正在使用 Xamarin(但 Java 应该非常相似)并且我正在使用 NDK 进行本机渲染。所以我得到了一个创建 OpenGL-ES 上下文的 GLSurfaceView 并且我'我能够从 C++ 渲染东西。
没有查看以下示例:https://github.com/googlesamples/android-Camera2Basic 我想从那里继续。
我没有将 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 得到相同的结果。
谢谢
凯
您是否还在目标表面的 camera2 捕获会话创建列表中包含了新的 SurfaceTexture,而不是 TextureView 的表面?
发现问题..这是由无效的 OpenGL 参数引起的:/
在搜索问题时,我创建了一个小样本。我上传以防有人感兴趣:SampleCode (OneDrive)
我正在尝试将 "new camera framework" Camera2 的相机流导入 OpenGL 纹理,但图像保持黑色。
我正在使用 Xamarin(但 Java 应该非常相似)并且我正在使用 NDK 进行本机渲染。所以我得到了一个创建 OpenGL-ES 上下文的 GLSurfaceView 并且我'我能够从 C++ 渲染东西。
没有查看以下示例:https://github.com/googlesamples/android-Camera2Basic 我想从那里继续。
我没有将 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 得到相同的结果。
谢谢 凯
您是否还在目标表面的 camera2 捕获会话创建列表中包含了新的 SurfaceTexture,而不是 TextureView 的表面?
发现问题..这是由无效的 OpenGL 参数引起的:/ 在搜索问题时,我创建了一个小样本。我上传以防有人感兴趣:SampleCode (OneDrive)