OpenGL ES 入门(一)常用函数

如果你不知道OpenGL 是干什么的,看到这下面这张图片就知道这到底是干什么的了


简单的说,它就是能高性能、高帧率利用GPU提供的2D和3D绘制能力
我先提供一片文章关于iOS设备渲染的文章
http://rannie.github.io/ios/2016/02/22/ios-display-opengles.html
也可以查看苹果官方文档https://developer.apple.com/library/content/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/OpenGLESontheiPhone/OpenGLESontheiPhone.html#//apple_ref/doc/uid/TP40008793-CH101-SW1
GLKit框架提供视图和视图控制器类,可以消除绘图和动画化OpenGL ES内容所需的设置和维护代码。GLKView类管理OpenGL ES的基础设施,为您的绘制代码提供一个场所,而GLKViewController类提供了在GLKit视图的OpenGL ES内容的流畅的动画渲染循环。这些类扩展了用于绘制视图内容和管理视图呈现的标准UIKit设计模式。因此,您可以将重点放在OpenGL ES渲染代码上,使您的应用程序快速启动并运行
之前看落影loyinglin写的第一篇关于OpenGL 的文章,只是了解了大概意思,如果要自己去写的话,根本不知道怎么去写,不知道每个函数具体怎么用

GLuint buffer;//缓冲区ID    OpenGL就可以一次绑定到多个缓冲区
glGenBuffers (GLsizei n, GLuint* buffers);

这个函数的作用:就是生成一个或者多个缓冲区对象,缓冲区兑现在幕后实例化,引用ID反悔给用户访问这些缓冲区对象
GLsizei n:定义生成多少个缓冲区对象,glGenBuffers将这个许多缓冲区ID返回给目标buffers数组
buffers:buffer是一个GLuint数组,glGenBuffers存储生成的缓冲区ID

glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);

这个函数的作用:分配内存并将数据存储在当前绑定的缓冲区对象的初始化内存中

  • target:它的第一个参数是我们要将数据复制到的缓冲区的类型 常见的就是GL_ARRAY_BUFFER和- GL_ELEMENT_ARRAY_BUFFER
  • size:要传递给缓冲区的数据大小(以字节为单位)一个简单sizeof的顶点数据就足够了
  • data:我们要发送的实际数据
  • usage:指定了我们希望显卡管理给定数据的方式。这可以采取3种形式:
    • GL_STATIC_DRAW:数据很可能根本不会发生变化,或很少发生。
    • GL_DYNAMIC_DRAW:数据可能会有很大变化。
    • GL_STREAM_DRAW:数据将在每次绘制时更改。
glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)  

这个函数的作用就是:指定了当绘制调用时OpenGL应如何解释顶点缓冲数据,指定的解释存储在当前绑定的顶点数组对象中

  • indx:指定要配置的顶点属性。请记住,我们在顶点着色器中指定了位置顶点属性的位置layout (location = 0)。这将设置顶点属性的位置,0因为我们想要将数据传递给该顶点属性,所以我们传入0。
  • size:参数指定顶点属性的大小
  • type:指定GL_FLOAT的数据类型(vec*GLSL中的a由浮点值组成)
  • normalized:指定是否要将数据归一化。如果我们将其设置为GL_TRUE,则所有数据的值不在0(或-1对于带符号数据)之间,1并将映射到这些值。我们把它留在GL_FALSE
  • stride: 告诉我们连续顶点属性集之间的空间。请注意,由于我们知道数组是紧密包装的(在下一个顶点属性值之间没有空格),我们也可以指定步骤,0以使OpenGL确定步幅(仅当值紧密包装时才起作用)。每当我们有更多的顶点属性时,我们必须仔细定义每个顶点属性之间的间距
  • GLvoid* ptr,因此需要奇怪的转换。这是抵消位置数据在缓冲区中开始的位置。由于位置数据位于数据数组的开头,所以这个值是正确的0。
glEnableVertexAttribArray (GLuint index) ````
启用通用顶点属性
 - Glint index:指定启用的顶点属性的索引

glCreateShader (GLenum type)````
这个函数的作用:创建一个空的着色器对象,并返回一个未签名的饮用ID到该着色器对象以供进一步使用

  • GLenum type:指定要创建的着色器的类型 顶点着色器传GL_VERTEX_SHADER
glShaderSource (GLuint shader, GLsizei count, const GLchar* const *string, const GLint* length) ````
这个函数的作用:将替换给定着色器对象的源代码,每当着色器被编译时,它是用给定的源代码进行编译
 - GLuint shader:指定要替换源代码的着色器对象
 - GLsizei count:指定string数组中的元素数
 - const GLchar* const *string:指定包涵要加载到着色器的源代码的字符串的指针数组(顶点着色器的实际源代码)
 - const GLint* length:指定字符串长度的数组 可以为NULL

glCompileShader (GLuint shader)````
使用附加的着色器对象的源变异给定的着色器对象

  • GLuint shader:要编译的着色器对象
glCreateProgram()````
创建一个程序并返回到新创建的程序对象的ID引用

glAttachShader (GLuint program, GLuint shader) ````
将编译的着色器对象附加到着色器程序,任何数量的着色器对象可以附加到着色器程序

  • GLuint program:指定要附加着色器对象的程序对象
  • GLuint shader:指定要附加的着色器对象
glLinkProgram (GLuint program) 

将所有附加的着色器成连到一个最终的着色器程序对象中,在连接步骤中,每个输出与着色器的每个输出匹配

glUseProgram (GLuint program) 

将给定的程序对象设置为用于后续绘制命令的当前活动着色器程序,如果提供一个值0,OpenGL将会使用它的旧绘图模式

  • GLuint program:要是用的着色器对象
glDeleteShader (GLuint shader)

删除给定的着色器对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容