zoukankan      html  css  js  c++  java
  • 【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 决定。

     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    【杂谈】压行技巧(压代码)
    【UVA】11464 Even Parity(枚举子集)
    【POJ】2373 Dividing the Path(单调队列优化dp)
    【POJ】2329 Nearest number
    【BZOJ】1833: [ZJOI2010] count 数字计数(数位dp)
    【BZOJ】2809: [Apio2012]dispatching(左偏树)
    【BZOJ】2342: [Shoi2011]双倍回文(Manacher)
    【BZOJ】1912: [Apio2010]patrol 巡逻(树的直径)
    【BZOJ】1911: [Apio2010]特别行动队(斜率优化dp)
    【BZOJ】1913: [Apio2010]signaling 信号覆盖(计算几何+计数)
  • 原文地址:https://www.cnblogs.com/esCharacter/p/8916217.html
Copyright © 2011-2022 走看看