【OpenGL】OpenGL4.3常用指令目录

参考OpenGL编程指南 第8版

VAO

void glGenVertexArrays(GLsizei n, GLuint *arrays);   返回n个未使用的对象名到数组arrays中,用作顶点数组对象。

 

void glBindVertexArray(GLuint array);  array 非 0,并且是glGenVertexArrays() 所返回的,那么它将创建一个新的顶点数组对象并且与其名称关联起来。如果绑定到一个已经创建的顶点数组对象中,那么会激活这个顶点数组对象。

 

void glDeleteVertexArrays(GLsizei n, GLuint *arrays);   删除 n 个在 arrays 中定义的顶点数组对象。

 

GLboolean glIsVertexArray(GLuint array);   如果 array 是一个已经用 glGenVertexArrays() 创建且没有被删除的顶点数组对象的名称,那么返回 GL_TRUE。

 

void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);  pointer 表示缓存对象中,从起始位置开始计算的数组数据的偏移值(假设起始地址为 0) ,使用基本的系统单位(byte) 。size 表示每个顶点需要更新的分量数目,可以是 1、2、3、4 或者 GL_BGRA。type 指定了数组中每个元素的数据类型(GL_BYTE、GL_UNSIGNED_BYTE、GL_SHORT、GL_UNSIGNED_SHORT、GL_INT、GL_UNSIGNED_INT、GL_FIXED、GL_HALF_FLOAT、GL_FLOAT 或 GL_DOUBLE) 。normalized 设置顶点数据在存储前是否需要进行归一化(或者使用 glVertexAttribFourN*() 函数) 。stride 是数组中每两个元素之间的大小偏移值(byte) 。如果 stride 为 0,那么数据应该紧密地封装在一起。

 

void glEnableVertexAttribArray(GLuint index);
void glDisableVertexAttribArray(GLuint index);
设置是否启用与 index 索引相关联的顶点数组。index 必须是一个介于 0 到 GL_MAX_VERTEX_ATTRIBS-1 之间的值。

 

Buffer

void glGenBuffers(GLsizei n, GLuint *buffers);                     返回 n 个当前未使用的缓存对象名称,并保存到 buffers 数组中。

 

void glBindBuffer(GLenum target, GLuint buffer);                指定当前激活的缓存对象。target :GL_ARRAY_BUFFER、GL_ELEMENT_ARRAY_BUFFER、GL_PIXEL_PACK_BUFFER、GL_PIXEL_UNPACK_BUFFER、GL_COPY_READ_BUFFER、GL_COPY_WRITE_BUFFER、GL_TRANSFORM_FEEDBACK_BUFFER 和 GL_UNIFORM_BUFFER。buffer 设置的是要绑定的缓存对象名称。

 

void glDeleteBuffers(GLsizei n, const GLuint *buffers);       删除 n 个保存在 buffers 数组中的缓存对象。

 

GLboolean glIsBuffer(GLuint buffer);

 

void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);  target 设置为 GL_ARRAY_BUFFER;索引数据为 GL_ELEMENT_ARRAY_BUFFER ;纹理数据为 GL_TEXTURE_BUFFER ;对于通过 transform feedback 着色器获得的结果设置为GL_TRANSFORM_FEEDBACK_BUFFER;一致变量设置为 GL_UNIFORM_BUFFER。size 表示存储数据的总数量。这个数值等于 data 中存储的元素的总数乘以单位元素存储空间的结果。如果传入 NULL,那么将保留 size 大小的未初始化的数据,以备后用。usage 可用的方式包括 GL_STATIC_DRAW、GL_STATIC_READ、GL_DYNAMIC_DRAW、GL_DYNAMIC_READ 等。

 

void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
  使用新的数据替换缓存对象中的部分数据。绑定到 target 的缓存对象要从 offset 字节处开始需要使用地址为 data、大小为 size 的数据块来进行更新。

 

void glClearBufferData(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void* data);

void glClearBufferSubData(GLenum target, GLenum internalformat, GLintptr offset, GLintptr size, GLenum format, GLenum type, const void* data);

 

void glCopyBufferSubData(GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintprr writeoffset, GLsizeiptr size);
  将绑定到 readtarget 的缓存对象的一部分存储数据拷贝到与 writetarget 相绑定的缓存对象的数据区域上。

 

void glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data);
  返回当前绑定到 target 的缓存对象中的部分或者全部数据。起始数据的偏移字节位置为 offset,回读的数据大小为 size 个字节,它们将从缓存的数据区域拷贝到 data 所指向的内存区域中。

 

其他

void glClear(GLbitfield mask);
  清除指定的缓存数据并重设为当前的清除值。

 

void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
  设置当前使用的清除颜色值,用于 RGBA 模式下对颜色缓存的清除工作。

 

void glFlush(void);
  强制之前的 OpenGL 命令立即执行。

 

void glFinish(void);
  强制所有当前的 OpenGL 命令立即执行,并且等待它们全部完成。

 

void glEnable(GLenum capability);
void glDisable(GLenum capability);
  glEnable() 开启一个模式,glDisable() 关闭它。

 

GLboolean glIsEnabled(GLenum capability);
  根据是否启用当前指定的模式,返回 GL_TRUE 或者 GL_FALSE。

 

Shader

GLint glGetUniformLocation(GLuint program, const char* name);
  返回着色器程序中 uniform 变量 name 对应的索引值。name 是一个以 NULL 结尾的字符串,不存在空格。

 

void glUniform{1234}{fdi ui}(GLint location, TYPE value);
void glUniform{1234}{fdi ui}v(GLint location, GLsizei count, const TYPE* values);
void glUniformMatrix{234}{fd}v(GLint location, GLsizei count, GLboolean transpose, const GLfloat* values);
void glUniformMatrix{2x3,2x4,3x2,3x4,4x2,4x3}{fd}v(GLint location, GLsizei count, GLboolean transpose, const GLfloat* values);
  设置与 location 索引位置对应的 uniform 变量的值。其中向量形式的函数会载入count 个数据的集合(根据 glUniform*() 的调用方式,读入 1 ~ 4 个值) ,并写入 location位置的 uniform 变量。如果 location 是数组的起始索引值,那么数组之后的连续 count 个元素都会被载入。GLfloat 形式的函数(后缀中有 f)可以用来载入单精度类型的浮点数、float 类型的向量、float 类型的数组、或者 float 类型的向量数组。与之类似,GLdouble 形式的函数(后缀中有 d)可以用来载入双精度类型的标量、向量和数组。GLfloat 形式的函数也可以载入布尔数据。

 

GLuint glCreateShader(GLenum type);
  分配一个着色器对象。type 必须是 GL_VERTEX_SHADER、GL_FRAGMENT_SHADER、GL_TESS_CONTROL_SHADER、GL_TESS_EVALUATION_SHADER 或 者GL_GEOMETRY_SHADER 中的一个。返回值可能是一个非零的整数值,如果为 0 则说明发生了错误。

 

void glShaderSource(GLuint shader, GLsizei count, const GLchar** string, const GLint* length);
  将着色器源代码关联到一个着色器对象 shader 上。

 

void glCompileShader(GLuint shader);
  编译着色器的源代码。

 

void glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei* length, char* infoLog);
  返回 shader 的最后编译结果。返回的日志信息是一个以 NULL 结尾的字符串,它保存在 infoLog 缓存中,长度为 length 个字符串。日志可以返回的最大值是通过 bufSize 来定义的。如果 length 设置为 NULL,那么将不会返回 infoLog 的大小。

 

GLuint glCreateProgram(void);
  创建一个空的着色器程序。

 

void glAttachShader(GLuint program, GLuint shader);
  将着色器对象 shader 关联到着色器程序 program 上。

 

void glDetachShader(GLuint program, GLuint shader);
  移除着色器对象 shader 与着色器程序 program 的关联。

 

void glLinkProgram(GLuint program);
  处理所有与 program 关联的着色器对象来生成一个完整的着色器程序。

 

void glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei* length, char* infoLog);
  返回最后一次 program 链接的日志信息。日志返回的字符串以 NULL 结尾,长度为 length 个字符,保存在 infoLog 缓存中。log 可返回的最大值通过 bufSize 指定。如果length 为 NULL,那么不会再返回 infoLog 的长度。

 

void glUseProgram(GLuint program);
  使用链接过的着色器程序 program。

 

void glDeleteShader(GLuint shader);
  删除着色器对象 shader。

 

void glDeleteProgram(GLuint program);
  立即删除一个当前没有在任何环境中使用的着色器程序 program,如果程序正在被某个环境使用,那么等到它空闲时再删除。

 

GLboolean glIsShader(GLuint shader);
  如果 shader 是一个通过 glCreateShader() 生成的着色器对象的名称,并且没有被删除,那么返回 GL_TRUE。

 

GLboolean glIsProgram(GLuint program);
  如果 program 是一个通过 glCreateProgram() 生成的程序对象的名称,并且没有被删除,那么返回 GL_TRUE。

 

绘制

void glDrawArrays(GLenum mode, GLint first, GLsizei count);
  使用当前绑定的顶点数组元素来建立一系列的几何图元,起始位置为 first,而结束位置为 first + count-1。mode 设置了构建图元的类型,它可以是 GL_POINTS、GL_LINES、GL_LINE_STRIP、GL_LINE_LOOP、GL_TRIANGLES、GL_TRIANGLE_STRIP、GL_TRIANGLE_FAN 和 GL_PATCHES 中的任意一种。

 

void glDrawArrays(GLenum mode, GLint first, GLsizei count);
  使用数组元素建立连续的几何图元序列,每个启用的数组中起始位置为 first,结束位置为 first + count–1。mode 表示构建图元的类型,它必须是 GL_TRIANGLES、GL_LINE_LOOP、GL_LINES、GL_POINTS 等类型标识符之一。

 

void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
  使用 count 个元素来定义一系列几何图元,而元素的索引值保存在一个绑定到 GL_ELEMENT_ARRAY_BUFFER 的缓存中(元素数组缓存,element array buffer) 。indices 定义了元素数组缓存中的偏移地址,也就是索引数据开始的位置,单位为字节。type 必须是 GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT 或者 GL_UNSIGNED_INT 中的一个,它给出了元素数组缓存中索引数据的类型。mode 定义了图元构建的方式,它必须是图元类型标识符中的一个,例如 GL_TRIANGLES、GL_LINE_LOOP、GL_LINES 或者 GL_POINTS。

 

void glMultiDrawArrays(GLenum mode, const GLint* first, const GLint* count, GLsizei primcount);
  在一个 OpenGL 函数调用过程中绘制多组几何图元集。 first 和 count 都是数组的形式,数组的每个元素都相当于一次 glDrawArrays() 调用,元素的总数由 primcount 决定。

 

void glMultiDrawElements(GLenum mode, const GLint* count, GLenum type, const GLvoid* const* indices, GLsizei primcount);
  在一个 OpenGL 函数调用过程中绘制多组几何图元集。fi  rst 和 indices 都是数组的形式,数组的每个元素都相当于一次 glDrawElements() 调用,元素的总数由 primcount 决定。

 

 

 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2018-04-23 10:27  esCharacter  阅读(664)  评论(0编辑  收藏  举报