Opengl Demo建立的一般流程为:
1,新建GLSurfaceView 并设为界面为它
glSurfaceView = new GLSurfaceView(this); glSurfaceView.setEGLContextClientVersion(2);//漏了写这个会没显示 glSurfaceView.setRenderer(new FreeStyleRenderer(this)); // glSurfaceView.setRenderer(new AirHockeyRender(this)); setContentView(glSurfaceView);
2,初始化FloatBuffer变量 用于存储本地数据 floatBuffer的大小由坐标的多少决定vertexData = ByteBuffer.allocateDirect(tableVerticesWithTriangles.length * BYTES_PER_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer(); vertexData.put(tableVerticesWithTriangles);
3,读取着色器内容String vertexTxt = TextResourceReader.readTextFileFromResource(context, R.raw.vertex_shapder); String fragTxt = TextResourceReader.readTextFileFromResource(context, R.raw.frag_shapder);4,编译着色器//compileShapder int vertexShapder = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShapder, vertexTxt); glCompileShader(vertexShapder); int fragShapder = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragShapder, fragTxt); glCompileShader(fragShapder);5,链接并使用程序int program = glCreateProgram(); glAttachShader(program, vertexShapder); glAttachShader(program, fragShapder); glLinkProgram(program); //use program glUseProgram(program);6,获取属性的位置//attribute的引用 aPositionLocation = glGetAttribLocation(program, A_POSITION); uColorLocation = glGetUniformLocation(program, U_COLOR);7,关联属性以及自定义的数据vertexData.position(0); glVertexAttribPointer(aPositionLocation, POSITION_COMPONENT_COUNT, GL_FLOAT, false, 0, vertexData); glEnableVertexAttribArray(aPositionLocation);8,在onDrawFrame中绘制glClear(GL_COLOR_BUFFER_BIT); glUniform4f(uColorLocation,0.5f,0.8f,0.5f,1.0f); glDrawArrays(GL_TRIANGLES,0,6);