OpenGL ES是针对嵌入式系统的OpenGL标准,iPhone端支持的是OpenGL ES 2.0. 并且iOS5之后引入了GLkit框架,方便我们使用OpenGL进行图形绘制.
使用3D数据生成一个2D图像的过程叫做渲染.OpenGL ES 为两个内存区域间的数据交换定义了缓存的概念.缓存是指图形处理器能够控制和管理的连续RAM.
几乎所有程序提供给GPU的数据都应该放入缓存中. 为缓存提供数据有以下7个步骤:
1. 生成 ---请求OpenGL ES 为图形处理器控制的缓存生成一个独一无二的标识符.---- glGenbuffers()
2.绑定 告诉OpenGL ES 为接下来的运算使用一个缓存 -----glBindBuffer()
3.缓存数据 ----让OpenGLES 为当前绑定的缓存分配并初始化足够的连续内存. ----glBufferData()
4. 启用 或者 禁止 --告诉OpenGL ES 在接下的渲染中是否使用缓存中的数据 ------glEnableVertexAttribArray()
5. 设置指针 告诉OpenGLES 在缓存中的数据的类型和所有需要访问的数据的内存偏移值 --- glVertexAttribPointer()
6. 绘图 -- 告诉OpenGL ES 使用当前绑定并启用的缓存中的数据渲染整个场景或者某个场景的一部分. ---glDrawArrays()
7.删除 -- 告诉OpenGL ES 删除以前生成的缓存并释放相关的资源.-----glDeleteBuffers()
使用GLKBaseEffect 能减少需要编写的代码,可以不用我们自己写"Shading Language"去编写GPU程序.
1.glGenBuffers(1, &buffer)函数,第一个参数用于指定要生成的缓存标识符的数量,第二个参数是一个指针,指向生成的标识符的内存保存位置.
2.glBindBuffer(GL_ARRAY_BUFFER, buffer);函数绑定用于指定标识符的缓存到当前缓存.第一个参数是一个常量,用于指定要绑定哪一种类型的缓存.
3.glBufferData(GL_ARRAY_BUFFER, sizeof(squareVertexData), squareVertexData, GL_STATIC_DRAW);
第一个参数用于指定要更新当前上下文中所绑定的是哪一个缓存.第二个参数指定要复制进这个缓存的字节的数量.第三个参数是要复制的字节的地址.最后第四个参数提示了缓存在未来的运算中可能将会被怎样使用.
4.glEnableVertexAttribArray(GLKVertexAttribPosition),用来启动顶点缓存渲染操作.
5.glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 3, 0),这个函数告诉OpenGL ES顶点数据在哪里,以及怎么解释为每一个顶点保存的数据.第一个参数指示当前绑定的缓存包含每个顶点的位置信息.第二个参数指示每个位置有3个部分.第三个参数告诉OpenGL ES每个部分都保存为一个浮点类型的值.第四个参数告诉OpenGL ES 小数点固定数据是否可以被改变.
6.通过glDrawArrays()来绘图.glDrawArrays(GL_LINE_LOOP, 0, 3);第一个参数告诉GPU怎么处理在绑定的顶点缓存内的顶点数据.第二个参数和第三个参数分别指定缓存内的需要渲染的第一个顶点位置和需要渲染的顶点的数量.
7.删除不需要的顶点缓存和上下文
glDeleteBuffers(1,&vertexBufferID);
有一些使用的例子在这里:https://github.com/Wutaotao692732757/LearnOpenGLDemo