效果图
核心代码
//纹理矩形
public class TextureRect
{
int mProgram;//自定义渲染管线程序id
int muMVPMatrixHandle;//总变换矩阵引用id
int maPositionHandle; //顶点位置属性引用id
int maTexCoorHandle; //顶点纹理坐标属性引用id
String mVertexShader;//顶点着色器
String mFragmentShader;//片元着色器
FloatBuffer mVertexBuffer;//顶点坐标数据缓冲
FloatBuffer mTexCoorBuffer;//顶点纹理坐标数据缓冲
int vCount=0;
public TextureRect(MySurfaceView mv)
{
//初始化顶点坐标与着色数据
initVertexData();
//初始化shader
initShader(mv);
}
//初始化顶点坐标与着色数据的方法
public void initVertexData()
{
//顶点坐标数据的初始化
vCount=6;
float vertices[]=new float[]
{
-UNIT_SIZE,UNIT_SIZE,0,
-UNIT_SIZE,-UNIT_SIZE,0,
UNIT_SIZE,-UNIT_SIZE,0,
UNIT_SIZE,-UNIT_SIZE,0,
UNIT_SIZE,UNIT_SIZE,0,
-UNIT_SIZE,UNIT_SIZE,0
};
//创建顶点坐标数据缓冲
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4);
vbb.order(ByteOrder.nativeOrder());//设置字节顺序
mVertexBuffer = vbb.asFloatBuffer();//转换为Float型缓冲
mVertexBuffer.put(vertices);//向缓冲区中放入顶点坐标数据
mVertexBuffer.position(0);//设置缓冲区起始位置
//顶点纹理坐标数据的初始化
float texCoo