OpenGL Shading Language API

336 阅读3分钟
  • 创建着色器对象

    GLuint glCreateShader(GLenum type);

    • 参数:type 类型值两个:
      • GL_VERTEX_SHADER(顶点着色器)
      • GL_FRAGMENT_SHADER(片元着色器)
    • 返回值:返回一个非零的值,作为着色器的标记
  • 删除着色器对象

    void glDeleteShader(GLuint shader)

    • 参数: 为创建着色器对象成功的返回值,也就是这个着色器的标识
  • 创建着色器对象后,把着色器的源代码和着色器对象关联起来

    void glShaderSource(GLuint shader,GLsizei count,const GLchar * const *string,const Glint *length);
    
    • 参数 1:指向着色器对象的句柄,就是创建着色器成功的返回值
    • 参数 2:着色器源字符串的数量,着色器可以由多个源字符串组成,但是每个着色器只有一个 main 函数,一般就 1 个字符串。
    • 参数 3:指向保存数量 count 的着色器源字符串的数组指针
    • 参数 4:指向保存每个着色器字符串大小且元素数量为 count 的整整数组指针
  • 编译着色器源代码

    void glCompileShader(GLuint shader)

    • 参数: shader 着色器标识
  • 查询编译结果

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

    • 参数 1:shader 着色器对象标识
    • 参数 2:GL_COMPLE_STATUS
    • 参数 3:指向查询结果的整数存储位置的指针
  • 获取编译相关日志,调试情况下使用

    void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length ,char *infoLog);

    • 参数 1:shader 着色器对象标识
    • 参数 2:maxLength 最大日志长度
    • 参数 3:length 如果为NULL 不返回任何日志
    • 参数 4:指向保存信息日志的字符缓冲区的指针
  • 创建空的着色器程序

    GLuint glCreateProgram()

    • 返回值:非零为正常,如果为 0 则表示创建失败
  • 删除着色器程序 ,如果这个着色器未在任何渲染环境中使用,它将立即删除。否则,会标记为删除,一旦它没不被使用了,便立即被删除

    void glDeleteProgram(GLuint program)

    • 参数 1:program 着色器程序标识
  • 把着色器和程序相关联

    void glAttachShader(GLuint program, GLuint shader);

    • 参数 1:program 着色器程序标识
    • 参数 2:shader 着色器对象标识
  • 断开着色器和程序的连接

    void glDetachShader(GLuint program)

    • 参数 1:program 着色器程序标识
  • 在着色器对象都连接到着色器程序之后,把这些对象连接成一个可执行程序

    void glLinkProgram()

  • 查询程序连接后的结果

    void glGetProgramiv (GLuint program, GLenum pname, GLint* params)

    • 参数 1:program 着色器程序标识
    • 参数 2:需要查询的参数名
      • GL_ACTIVE_ATTRIBUTES
      • GL_ACTIVE_ATTRIBUTES_MAX_LENGTH
      • GL_ACTIVE_UNIFORM_BLOCK
      • GL_ACTIVE_UNIFORM_BLOCK_MAX_LENGTH
      • GL_ACTIVE_UNIFORMS
      • GL_ACTIVE_UNIFORMS_MAX_LENGTH
      • GL_ATTACHED_SHADERS
      • GL_DELETE_STATUS
      • GL_INFO_LOG_LENGTH
      • GL_LINK_STATUS
      • GL_PROGRAM_BINARY_RETRIEVABLE_HINT
      • GL_TRANSFORM_FEEDBACK_BUFFER_MODE
      • GL_TRANSFORM_FEEDBACK_VARYINGS
      • GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
      • GL_VALIDATE_STATUS
    • 参数 3:指向查询结果整数存储位置的指针
  • 获取连接着色器程序错误日志信息

    void glGetProgramInfoLog(GLuint program, GLsizei maxLength, GLsize *length char *infoLog)
    
    • 参数 1:program, 着色器程序标识
    • 参数 2:maxLength,最大日志长度
    • 参数 3:length,写入的日志信息长度,如果为 NULL 不返回任何日志
    • 参数 4:infoLog,指向存储日志信息的字符缓冲区的指针
  • 使用着色器程序

    void glUseProgram(GLuint program)

    • 参数:program, 着色器程序标识
  • 验证 Shader

    void GLboolean glIsShader(GLuint shader)

    • 参数:shader, 成功创建 shader 以后返回的那个标识
  • 验证一个着色器程序是否可以在当前OpenGL 环境下使用

    void glValidateProgram(GLuint program)

    • 参数:program, 着色器程序标识

    验证结果查询,使用 glGetProgramiv() 传入参数 GL_VALIDATE_STATUS 为参数,查询程序验证结果


参考文章:OpenGL ES_着色器_程序