我正在使用GLSurfaceView
活动在Android设备上显示相机框架。因为我是OpenGl Es
中的新手,我想知道如何获取图像缓冲区并对其进行修改,然后在手机上显示修改后的帧?
在我的实现GLSurfaceView.Renderer
的Renderer类中,我调用了一个本机函数:
public class Renderer implements GLSurfaceView.Renderer {
public void onDrawFrame(GL10 gl) {
MyJNINative.render();
}
...
}
我正在使用的API
提供了一种connectCallBack
方法,可以通过onFrameAvailableNow
之类的方式访问图像缓冲区。
所以我已经有了const
类型的图像缓冲区。所以我对它的修改不会得到反映。
现在我的问题是如何添加一些gl
方法来修改可以在显示器上反映的图像缓冲区?
我的原生渲染器:
Java_com_project_MyJNINative_render(
JNIEnv*, jobject) {
// Let's say I have image buffer here called "uint_8t* buffer"
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glViewport(0, 0, width, height);
// UpdateTexture()
api_handler.UpdateTexture());
gl_vid_obj->Render(glm::mat4(1.0f), glm::mat4(1.0f));
/// I NEED SOME CODE HERE TO set gl buffer
}
答案 0 :(得分:0)
如fadden所述,您无法更改连接到SurfaceTexture的预览缓冲区。但是可以获取onPreviewFrame()
的预览缓冲区,修改它并通过glTexSubImage2D()
将结果推送到OpenGL。有两个陷阱:你应该隐藏实际的预览(可能将它连接到GL表面上看不到的纹理),你应该足够快地进行所有处理(至少为#34;预览&## 20 FPS) 34;看起来很自然)。