opengl_interface

VAO

  • void glGenVertexArrays(GLsizei n, Gluint * arrays)
    • 创建n个VAO对象,并将索引存储在arrays中
  • void glBindVertexArray(GLuint array​)
    • 绑定VAO
  • void glEnableVertexAttribArray(GLuint index​)

  • void glDisableVertexAttribArray(GLuint index​)

    • 启用或禁用指定VAO
  • void glDeleteVertexArrays(GLsizei n, const GLuint * arrays)
    • 根据 arrays 数组中的索引, 删除n个VAO
  • void glVertexAttribPointer(GLuint index​, GLint size​, GLenum type​, GLboolean normalized​, GLsizei stride​, const GLvoid * pointer​)

VBO

  • void glGenBuffers(GLsizei n, GLuint * buffers)

    • 创建 n 个VBO, 并将索引存储在buffers 中
  • void glBindBuffer(GLenum target, GLuint buffer)

    • 绑定buffer到target的缓存, 同一种类型的缓存只能指向一个buffer
  • void glBufferData(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage)

    • 为绑定到target的缓存分配size大小的空间, 如果data不为NULL, 则会被拷贝至目标缓存,用法被限定为usage
  • void glBufferSubData(GLenum target, GLintptr offset, GLsizeptr size, const GLvoid * data)

    • 以data为数据源, 缓存对象 + offset 为目标地址, 拷贝size大小的数据
  • void * glMapBuffer(GLenum target, GLenum access)

    • 将当前绑定到target的VBO的地址,使用这个地址可以直接操作缓冲区。 access该指针指向数据的访问策略
  • GLboolean glUnmapBuffer(GLenum target)

  • void glDeleteBuffers(GLsizei n, const GLuint * buffers)

    • 根据 buffers数组中的索引,删除n个VBO
  • 深度测试
    void glDepthFunc(GLenum func)

    • 指定深度测试时使用的函数类型, func必须是深度测试函数中的一个。

Shader and Program编程基本概念

SHADER

  • GLuint glCreateShader()

  • void glShaderSource(GLuint prog, GLsizei size, const GLchar* source, const Glint length)

  • void glCompileShader(GLuint shader)

  • void glGetShaderiv(GLuint shader, GLenum pname, GLint * params)

    • 获取指定shader的pname属性
  • void glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei length, GLchar source)
    • 将shader的源码写入source, bufSize 为缓冲区长度,length为返回的代码长度

PROGRAM

  • GLuint glCreateProgram()

  • void glAttachShader(GLuint prog, GLuint shader)

  • void glLinkProgram(GLuint prog)

  • void glUseProgran(GLuint prog)

  • void glGetProgramiv(GLuint prog, GLenum panme, GLint* params)

  • void glGetActiveAttrib(GLuint program​, GLuint index​, GLsizei bufSize​, GLsizei length​, GLint size​, GLenum type​, GLchar name​)

  • void glGetActiveUniform(GLuint program​, GLuint index​, GLsizei bufSize​, GLsizei length​, GLint size​, GLenum type​, GLchar name​)

  • void glGetProgramInfoLog(GLuint program​, GLsizei maxLength​, GLsizei length​, GLchar infoLog​)

  • GLuint glGetUniformLocation(GLuint prog, const GLchar* name)

  • 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)

    -- 设置与locate索引位置对应的uniform变量的值,其中向量形式的函数会载入count个数据的集合
    --transpose 为GL_TRUE, 已行主序读入,为GL_FALSE则以列主序读入。
    

变量储存限定符

  • attribute –顶点着色器中声明的变量, 可使用函数glAttrib*来操作

    • void glBindAttribLocation(GLuint prog, GLuint index, const Glchar* name)
      • 将prog程序中的name变量关联到index上
    • void glGetAttribLocation(GLuint prog, const GLchar* name)
  • uniform –由应用程序指定,所有着色器共享但无法更改的变量,可使用glUniform*操作

  • varying –顶点着色器声明赋值,片元着色器使用的变量

TEXTURE

OpenGL学习笔记(一) 纹理基础知识

  • void glActiveTexture(GLenum texture​)

  • void glBindTexture(GLenum target​, GLuint texture​)

  • void glDeleteTextures(GLsizei n​, const GLuint * textures​)

  • void glPixelStore*(GLenum pname, type, param)

  • void glTexParameter*(GLenum target​, GLenum pname​, Type param​)

  • void glCompressedTexImage2D(GLenum target​, GLint level​, GLenum internalformat​, GLsizei width​, GLsizei height​, GLint border​, GLsizei imageSize​, const GLvoid * data​)

  • void glTexSubImage2D(GLenum target​, GLint level​, GLint xoffset​, GLint yoffset​, GLsizei width​, GLsizei height​, GLenum format​, GLenum type​, const GLvoid * data​)

  • void glGenerateMipmap(GLenum target​)

DRAW

  • void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices)
    • 使用 GL_ELEMENT_ARRAY_BUFFER中起始偏移为indeices的count个顶点索引来绘制mode图元
  • void glDrawArrays(GLenum mode​, GLint first​, GLsizei count​);

STATE

  • void glGetXXX(GLenum pname, type)
    • 返回pname属性的当前设置
  • void glEnable(GLenum cap​)

  • void glDisable(GLenum cap​)

    • 启用/停用 cap指定状态
  • void glBlendFunc(GLenum sfactor, GLenum dfactor)
  • void glBlendFunci(GlUint buf, GLenum sfactor, GLenum dfactor)
    • 设置[指定缓存]颜色混合逻辑
  • void glBlendFuncSeparate(GLenum srcRGB​, GLenum dstRGB​, GLenum srcAlpha​, GLenum dstAlpha​)

  • void glBlendFuncSeparatei(GLuint buf​, GLenum srcRGB​, GLenum dstRGB​, GLenum srcAlpha​, GLenum dstAlpha​)

    • 逐分量设置[指定缓存]颜色混合逻辑
  • void glBlendEquation(GLenum mode​) –todo 不甚了解,大概是设置混合方程?

枚举

  • 深度测试函数

    • GL_NEVER 所有都不通过
    • GL_LESS 当输入深度小于缓冲深度时通过
    • GL_EQUAL 当输入深度等于缓冲深度时通过
    • GL_LEQUAL 小于等于时*通过
    • GL_GREATER 大于时 通过
    • GL_NOTEQUAL 不等于时通过
    • GL_GEQUAL 大于或等于时通过
    • GL_ALWAYS 无条件通过
  • 缓冲区类型

  • 缓冲区使用限定

  • 访问策略

    • GL_READ_ONLY 只能从该地址读取数据
    • GL_WRITE_ONLY 只能向该地址写入数据
    • GL_READ_WRITE 既可以从地址读数据,也可以向地址写数据
  • 图元类型

    • GL_POINTS 点(直接使用顶点数据)
    • GL_LINES 线(每两个连续的点绘制成一条线段[01],[23])
    • GL_LINE_STRIP 条带线(相邻的两个顶点绘制成一条线段[01],[12])
    • GL_LINE_LOOP 循环线(与条带线类似,而且末点与首点相连成线)
    • GL_TRIANGLES 三角形(每三个连续顶点组成一个三角形[012],[345])
    • GL_TRIANGLE_STRIP 三角形条带(相邻的三个顶点组成一个三角形[012][123])
    • GL_TRIANGLE_FAN 扇形带(从第二个点起每两个连续的顶点与第一个顶点组成三角形[012][034][056])
    • GL_PATCHES 批量渲染(每一组顶点一起渲染, 可通过 glPatchParameteri​ 来设置)
      邻接图元
      邻接图元与以上基本图元不同的是,这些图元会附带邻接数据,邻接数据只会在几何着色器中被处理,如果没有几何着色器,则邻接数据会被直接抛弃。
    • GL_LINES_ADJACENCY 包含4个顶点,第23个顶点构成线段,1,4为邻接信息
    • GL_LINE_STRIP_ADJACENCY 相邻的四个顶点([0123][1234]为一个GL_LINES_ADJACENCY
    • GL_TRIANGLES_ADJACENCY 包含6个顶点, 第1,3,5个顶点构成三角形,第2,4,6个保存邻接信息
    • GL_TRIANGLE_STRIP_ADJACENCY 需要配合图例解释,详见以上链接
  • Shader属性

    • GL_SHADER_TYPE shader类型
    • GL_DELETE_STATUS shader是否待删除
    • GL_COMPILE_STATUS shader编译状态,返回GL_TRUE表示编译成功
    • GL_INFO_LOG_LENGTH shader LOG信息长度
    • GL_SHADER_SOURCE_LENGTH shader源码长度

参考资料

1.官方文档


opengl_interface
https://leafflow.top/2016/04/12/render/opengl-interface-2016-04-12/
作者
vollen
发布于
2016年4月12日
许可协议