美文网首页
OpenGL ES 自定义着色器

OpenGL ES 自定义着色器

作者: Joker_King | 来源:发表于2020-08-06 08:21 被阅读0次

    着色器

    创建着色器

    GLuint glCreateShader(GLenum type);
    type:创建着色器的类型。
    GL_VERTEX_SHADER  顶点着色器
    GL_FRAGMENT_SHADER 片元着色器
    返回值:是指向新着色器的句柄。
    

    删除着色器

    void glDeleteShader(GLuint shader);
    shader:要删除着色器对象的句柄。
    

    编译着色器

    将着色器的源代码附着到着色器对象上。

    void glShaderSource(GLuint shader , GLSizei count ,const GLChar * const *string, const GLint *length);
    shader:指向着色器对象的句柄。
    count:着色器源字符串的数量,着色器可以由多个源字符串组成,但是每个着色器只有一个main函数。
    string:指向保存数量的count的着色器源字符串的数组指针。
    length:指向保存每个着色器字符串大小数量为count的整数数组指针。
    

    开始编译着色器源代码。

    void glCompileShader(GLuint shader);
    shader:需要编译的着色器对象的句柄
    

    创建与链接程序

    创建

    创建一个程序对象

    GLUint glCreateProgram( );
    返回值:返回一个执行新程序对象的句柄
    

    删除

    void glDeleteProgram( GLuint program );
    program:指向需要删除的程序对象句柄
    

    着色器与程序的附着

    void glAttachShader( GLuint program , GLuint shader );
    program:指向程序对象的句柄。
    shader:指向程序链接着色器对象的句柄。
    

    断开链接

    void glDetachShader(GLuint program);
    program:指向程序对象的句柄。
    shader:指向程序断开链接的着色器对象的句柄
    

    程序的链接

    glLinkProgram(GLuint program);
    program:指向程序对象的句柄。
    

    获取链接的状态

    void glGetProgramiv (GLuint program,GLenum pname, GLint *params);
    program:需要获取信息的程序对象的句柄。
    pname:获取的参数信息,可以是:
    GL_ACTIVE_ATTRIBUTES 
    GL_ACTIVE_ATTRIBUTES_MAX_LENGTH 
    GL_ACTIVE_UNIFORM_BLOCK 
    GL_ACTIVE_UNIFORM_BLOCK_MAX_LENGTH 
    GL_ACTIVE_UNIFROMS 
    GL_ACTIVE_UNIFORM_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
    
    params:指向查询结果整数位置的指针
    

    FrameBuffer&RenderBuffer

    -w546

    RenderBuffer

    一个RenderBuffer对象是通过应用分配的一个2D图像缓冲区。RenderBuffer对象能够被用来分配和存储颜色、深度或者模板值。也能够在FrameBuffer中被用作颜色、深度、模板的附件。一个RenderBuffer是一个类似于屏幕窗口系统提供的可绘制的表面。比如pBuffer,一个RenderBuffer并不能直接使用纹理对象。

    FrameBuffer

    一个FrameBuffer对象(通常被称为FBO)。是一个收集颜色、深度、和模板缓冲区的附着点。描述属性的状态,例如颜色、深度和模板缓冲区的大小和格式,都关联到FBO。各种各样的2D图形能够被附着FrameBuffer对象的颜色附着点。它们包含了RenderBuffer对象存储的颜色值,一个2D纹理或立方体贴图。或者一个mip-level的二维切面的3D纹理。同样,各种各样的2D图形包含了当时的深度值,可以附加到一个FBO的深度附着点中去,唯一的2D图像能够附着在FBO的模板附着点,是一个RenderBuffer对象存储的模板值。

    相关文章

      网友评论

          本文标题:OpenGL ES 自定义着色器

          本文链接:https://www.haomeiwen.com/subject/tgcurktx.html