OpenGL-ES API学习理解

OpenGL® ES 3.2
https://www.khronos.org/registry/OpenGL-Refpages/es3/

void glGenBuffers(GLsizei n, GLuint * buffers)

创建n个缓存对象,这n个缓存对象保存在数组buffers,每个buffer对象是一个int数字,当n小于0时,产生GL_INVALID_VALUE错误码。

void glBindBuffer(GLenum target, GLuint buffer)

将缓存对象绑定制定的target,target只能取GL_ARRAY_BUFFER或GL_ELEMENT_ARRAYBUFFER,当buffer取0时,表面解绑定。

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

  1. 描述 :
    将CPU中数据拷贝到GPU(frame object)
  2. 参数 :
    target : 只能取GL_ARRAY_BUFFER或GL_ELEMENT_ARRAYBUFFER
    size : buffer对象大小
    data : 指向顶点数据的内存指针,如果取NULL,表明没有数据拷贝
    usage : 告诉程序怎么去使用这些buffer object顶点数据值,GL_STATIC_DRAW程序只指定一次GPU内存对象的数据,而且数据会被多次(非常频繁地) 用于绘制图元。GL_DYNAMIC_DRAW程序不断地指定GPU内存对象的数据,而且数据会被非常频繁地用于绘制图元。GL_STREAM_DRAW程序只指定一次GPU 内存对象的数据,而且数据会被数次(不确定几次)用于绘制图元。

void glGenFramebuffers(GLsizei n, GLuint * framebuffers)

创建n个帧缓存对象,这n个帧缓存对象保存在数组framebuffers,每个framebuffer对象是一个int数字。 这一组对象名称不一定是连续的,但是调用这个接口产品的对象名称之前肯定没有使用。

void glBindFramebuffer(GLenum target, GLuint framebuffer)

绑定帧缓存对象,target只能取固定值GL_FRAMEBUFFER,当绑定成功后,framebuffer状态包括color/depth/stencil, 当非0的framebuffer绑定后,所有的渲染framebuffer画图接口(glDrawArrays and glDrawElements)和读取framebuffer 接口(glReadPixels, glCopyTexImage2D, or glCopyTexSubImage2D)将关联绑定的framebuffer对象,而非默认窗口系统提供的framebuffer对象。

void glGenVertexArrays(GLsizei n, GLuint *arrays)

创建n个定点数组对象,这n个定点数组对象保存在数组arrays,每个array对象是一个int数字。 VAO本身并没有存储顶点的相关属性数据,这些信息是存储在VBO中的,VAO相当于是对很多个VBO的引用,把一些VBO组合在一起作为一个对象统一管理。

void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)

  1. 描述:

    设置清除颜色,所有参数初始值都是0

  2. 参数:

    red指红色值,范围从0.0f~1.0f
    green指绿色值,范围从0.0f~1.0f Specify the dimensions of the pixel rectangle. width and height of one correspond to a single pixel. blue指蓝色值,范围从0.0f~1.0f
    alpha指透明度值,范围从0.0f~1.0f,0表示不透明,1表示透明

void glPixelStorei(GLenum pname, GLint param)

设置像素数据存储格式,影响获取或上传纹理数据。pname表示设置的参数名称,param表示针对pname设置的具体值。当从GPU获取(pack)像素数据到CPU内存中时,pname可以取GL_PACK_ROW_LENGTH, GL_PACK_SKIP_PIXELS, GL_PACK_SKIP_ROWS, and GL_PACK_ALIGNMENT,pack对glReadPixels有意义。当从CPU内存中解压(unpack)像素数据到GPU时,pname可以取GL_UNPACK_ROW_LENGTH, GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_SKIP_PIXELS, GL_UNPACK_SKIP_ROWS, GL_UNPACK_SKIP_IMAGES, and GL_UNPACK_ALIGNMENT,unpack对如下接口有意义 glTexImage2D, glTexImage3D, glTexSubImage2D, and glTexSubImage3D。
GL_PACK_ROW_LENGTH-设置像素数据布局中每一行所包含的像素个数
GL_PACK_SKIP_PIXELS-设置从像素数据中跳过多少个像素
GL_PACK_SKIP_ROWS-置像素数据需要跳过的行数
GL_PACK_ALIGNMENT-设置像素数据每一行在内存中的对齐方式,取值可以为1,2,4,8
GL_UNPACK_IMAGE_HEIGHT-图片高度,单个像素长度一行像素个数一幅图的像素行数
es2.0中的pname只提供GL_PACK_ALIGNMENT和GL_UNPACK_ALIGNMENT。

void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * data)

是将GPU渲染完数据,从GPU回传到host(CPU)端,由入参(x,y,w,h)制定一个从一帧图像中读取内存的矩形,type和format指定格式,data是读出的像素信息。
x,y:描画的图像的左下角的坐标,也就是相对显示窗的左下角为(0,0)原点的坐标点,如果想截取整个opengl显示窗口,取0,0即可。 
width,height:像素长矩形的尺寸,表示单个像素的长度和宽度。 
format :像素数据格式,比如GL_RGBA和GL_RGBA_INTEGER。 
type:像素数据的数据类型,只能取GL_UNSIGNED_BYTE,GL_UNSIGNED_INT,GL_INT,GL_FLOAT。
data:读出返回的像素数据。 
当非0缓存对象绑定的目标target是GL_PIXEL_PACK_BUFFER时,data不是CPU内存,而是buffer对象(GPU)数据区的偏移,即类似GPU内部数据拷贝。

void glDrawArrays(GLenum mode, GLint first, GLsizei count)

绘制所图元 mode 绘制的图元方式,可以是GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_LINE_STRIP_ADJACENCY, GL_LINES_ADJACENCY, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_TRIANGLE_STRIP_ADJACENCY, GL_TRIANGLES_ADJACENCY and GL_PATCHES
first 从第几个顶点下标开始绘制
count 指多少个顶点下标需要绘制
GL_LINE_STRIP_ADJACENCY, GL_LINES_ADJACENCY, GL_TRIANGLE_STRIP_ADJACENCY, GL_TRIANGLES_ADJACENCY and GL_PATCHES只有es3.2版本及以上支持。

void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)

mode 指定绘制图元的类型
count 索引个数。
type 为索引值的类型,只能是下列值之一:GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, or GL_UNSIGNED_INT。
indices 下标在内存中的首地址(如果使用了VBO,就是GPU中绑定的buffer的内存偏移,若不是,则为CPU内存中的首地址)

你可能感兴趣的:(综合)