/**
* 贴纸滤镜
*/
public class WaterFilter extends AbstractFrameFilter {
private static final String TAG = "WaterFilter ";
private Bitmap mBitmap;
int mTextureId;
public TimeFilter(Context context) {
super(context, R.raw.base_vertex, R.raw.base_frag);
}
@Override
public void onReady(int width, int height) {
super.onReady(width, height);
}
@Override
public int onDrawFrame(int textureId) {
//设置显示窗口
GLES20.glViewport(0, 0, mOutputWidth, mOutputHeight);
//不调用的话就是默认的操作glsurfaceview中的纹理了。显示到屏幕上了
//这里我们还只是把它画到fbo中(缓存)
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFrameBuffers[0]);
//使用着色器
GLES20.glUseProgram(mGLProgramId);
//传递坐标
mGLVertexBuffer.position(0);
GLES20.glVertexAttribPointer(vPosition, 2, GLES20.GL_FLOAT, false, 0, mGLVertexBuffer);
GLES20.glEnableVertexAttribArray(vPosition);
mGLTextureBuffer.position(0);
GLES20.glVertexAttribPointer(vCoord, 2, GLES20.GL_FLOAT, false, 0, mGLTextureBuffer);
GLES20.glEnableVertexAttribArray(vCoord);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
//因为这一层是摄像头后的第一层,所以需要使用扩展的 GL_TEXTURE_EXTERNAL_OES
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId);
GLES20.glUniform1i(vTexture, 0);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);
&nbs

这篇博客详细介绍了如何在Android中使用OpenGL实现录像时添加静态图片水印的功能。通过创建`WaterFilter`类,利用OpenGL ES进行纹理处理,将时间戳、速度等信息绘制到Bitmap上,然后将Bitmap作为水印叠加到视频帧上,实现了动态添加水印的效果。博客内容涉及到OpenGL的纹理处理、混合模式以及Canvas的使用。
5721

被折叠的 条评论
为什么被折叠?



