index:绑定顶点着色器里的第几个属性

size:一个顶点所有数据的个数,这里每个顶点包含了xyz三个浮点数所以是3
type:顶点描述数据的类型,这里position数组中的数据全部为float,所以是GL_FLOAT
normalized:是否需要显卡帮忙把数据归一化到-1到+1区间,这里不需要,所以设置GL_FALSE
stride:一个顶点到下一个顶点的字节数,这里为3+3个元素(顶点xyz+纹理xyz)两个float,所以是sizeof(float)*6
pointer:顶点数组中第一个元素的指针
glEnableVertexAttribArray
我们能声明的顶点属性是有上限的,它一般由硬件来决定。OpenGL确保至少有16个包含4分量的顶点属性可用,但是有些硬件或许允许更多的顶点属性,你可以查询glGetIntegerv(GL_MAX_VERTEX_ATTRIBS,&n); 来获取具体的上限。默认情况下,出于性能考虑,所有顶点着色器的属性(Attribute)变量都是关闭的,所以需要通过glEnableVertexAttribArray来打开。
4.4.3 构建纹理数据
//传纹理的像素格式给fragment shader
GLint yuvType = glGetUniformLocation(m_programId, "yuvType");
glUniform1i(0, yuvType);
GLint samplerY = glGetUniformLocation(m_programId, "SamplerY");
GLint samplerU = glGetUniformLocation(m_programId, "SamplerU");
GLint samplerV = glGetUniformLocation(m_programId, "SamplerV");
glUniform1i(samplerY, 0);
glUniform1i(samplerU, 1);
glUniform1i(samplerV, 2);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,m_textures[0]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, frame->width, frame->height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, frame->data[0]);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, m_textures[1]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, frame->width/2, frame->height/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, frame->data[1]);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, m_textures[2]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, frame->width/2, frame->height/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, frame->data[2]);
glGetUniformLocation
从片段着色器中获取uniform变量的引用
glUniform1i
给uniform变量的引用赋int类型的值
glActiveTexture
启用纹理槽,OpenGL支持32个纹理槽,GL_TEXTURE0 - GL_TEXTURE31
glBindTexture
将本地代码里创建的纹理绑定到系统的纹理槽上
glTexImage2D
在纹理槽上填充纹理图像数据
4.4.4 呈现
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
eglSwapBuffers(m_display, m_surface);
glClear
清理画布
glDrawArrays
绘制顶点,在前面加入的顶点数组中连贯地画连续4个点的连线。
GL_POINTS - 单独的将顶点画出来。
GL_LINES - 单独地将直线画出来。行为和 GL_TRIANGLES 类似。
GL_LINE_STRIP - 连贯地将直线画出来。行为和 GL_TRIANGLE_STRIP 类似。
GL_LINE_LOOP - 连贯地将直线画出来。行为和 GL_LINE_STRIP 类似,但是会自动将最后一个顶点和第一个顶点通过直线连接起来。
GL_TRIANGLES - 这个参数意味着OpenGL使用三个顶点来组成图形。所以,在开始的三个顶点,将用顶点1,顶点2,顶点3来组成一个三角形。完成后,在用下一组的三个顶点(顶点4,5,6)来组成三角形,直到数组结束。
GL_TRIANGLE_STRIP - OpenGL的使用将最开始的两个顶点出发,然后遍历每个顶点,这些顶点将使用前2个顶点一起组成一个三角形。

无论多复杂的图像,OpenGL都是靠这种一个一个的小三角形拼接而成的。