<!-- Tell the system this app requires OpenGL ES 2.0. --><uses-feature android:glEsVersion="0x00020000" android:required="true" />3.0的版本为0x00030000,3.1的版本为0x00030001。
attribute vec4 vPosition; void main() {gl_Position = vPosition; }片元着色器:
precision mediump float; uniform vec4 vColor; void main() {gl_FragColor = vColor; }gl_Position和gl_FragColor都是Shader的内置变量,分别为定点位置和片元颜色。
所以,为了不超出屏幕,我们的坐标数据设置为:
float triangleCoords[] = { 0.5f, 0.5f, 0.0f, // top -0.5f, -0.5f, 0.0f, // bottom left 0.5f, -0.5f, 0.0f // bottom right };颜色数据,我们设置为单一颜色:
float color[] = { 1.0f, 1.0f, 1.0f, 1.0f }; //白色第三步
//将背景设置为灰色 GLES20.glClearColor(0.5f,0.5f,0.5f,1.0f);//申请底层空间 ByteBuffer bb = ByteBuffer.allocateDirect(triangleCoords.length * 4); bb.order(ByteOrder.nativeOrder()); //将坐标数据转换为FloatBuffer,用以传入给OpenGL ES程序 vertexBuffer = bb.asFloatBuffer(); vertexBuffer.put(triangleCoords); vertexBuffer.position(0);int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER,vertexShaderCode); int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER,fragmentShaderCode); //创建一个空的OpenGLES程序 mProgram = GLES20.glCreateProgram(); //将顶点着色器加入到程序 GLES20.glAttachShader(mProgram, vertexShader); //将片元着色器加入到程序中 GLES20.glAttachShader(mProgram, fragmentShader); //连接到着色器程序 GLES20.glLinkProgram(mProgram);第四步
GLES20.glViewport(0,0,width,height);第五步
//将程序加入到OpenGLES2.0环境 GLES20.glUseProgram(mProgram); //获取顶点着色器的vPosition成员句柄 mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); //启用三角形顶点的句柄 GLES20.glEnableVertexAttribArray(mPositionHandle); //准备三角形的坐标数据 GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, vertexBuffer); //获取片元着色器的vColor成员的句柄 mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); //设置绘制三角形的颜色 GLES20.glUniform4fv(mColorHandle, 1, color, 0); //绘制三角形 GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount); //禁止顶点数组的句柄 GLES20.glDisableVertexAttribArray(mPositionHandle);最终效果
源码地址
所有的代码全部在一个项目中,托管在Github上——Android OpenGLES 2.0系列博客的Demo
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。