最近在对接WebRTC到安卓手机上,有个需求就是手机横屏时将对方图像进行旋转,研究了WebRTC video_render的代码后发现远端的视频渲染使用opengles20或surfaceview实现,其中opengles20使用硬件渲染,因此性能更好,所以只需将video_render_opengles20.h中的VideoRenderOpenGles20类加上旋转接口即可。
opengles20和opengles相比取消了glRotatex等操作函数,旋转操作改为由shader的顶点渲染实现,改写的shader代码如下:
uniform mat4 uMVPMatrix; //总变换矩阵 attribute vec4 aPosition; //顶点位置 attribute vec2 aTextureCoord; varying vec2 vTextureCoord; void main() { gl_Position = uMVPMatrix * aPosition; //根据总变换矩阵计算此次绘制此顶点位置 vTextureCoord = aTextureCoord;//将接收的颜色传递给片元着色器 }
注意添加了变换矩阵uMVPMatrix,在绘制前调用:
int muMVPMatrixHandle = glGetUniformLocation(mProgram, "uMVPMatrix");
mMMatrix.setRotate(rotate);
glUniformMatrix4fv(muMVPMatrixHandle,
1
,
false
, (float*)mMMatrix
);
时间: 2024-10-11 13:20:33