• 初识OpenGL (4)链接着色器


    1. 着色器程序

    着色器程序对象(Shader Program Object)是多个着色器合并之后并最终链接完成的版本。如果要使用刚才编译的着色器我们必须把它们链接(Link)为一个着色器程序对象,然后在渲染对象的时候激活这个着色器程序。已激活着色器程序的着色器将在我们发送渲染调用的时候被使用。

    当链接着色器至一个程序的时候,它会把每个着色器的输出链接到下个着色器的输入。当输出和输入不匹配的时候,你会得到一个连接错误。

    step1. 创建着色器程序对象

    glCreateProgram函数创建一个程序,并返回新创建程序对象的ID引用。

    unsigned int shaderProgram;
    shaderProgram = glCreateProgram();
    
    • 1
    • 2

    step2. 把之前编译的着色器附加到程序对象上,然后用glLinkProgram链接它们

    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);
    glLinkProgram(shaderProgram);
    
    • 1
    • 2
    • 3

    step3. 检测链接着色器程序是否失败,并获取相应的日志。

    与之前不同,我们不会调用glGetShaderiv和glGetShaderInfoLog

    glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);
    if(!success) {
        glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);
        ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    step4. 激活这个程序对象

    调用glUseProgram函数,用刚创建的程序对象作为它的参数。

    glUseProgram(shaderProgram);
    
    • 1

    在glUseProgram函数调用之后,每个着色器调用和渲染调用都会使用这个程序对象(也就是之前写的着色器)了。

    step5. 删除着色器对象

    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);
    
    • 1
    • 2

    现在,我们已经把输入顶点数据发送给了GPU,并指示了GPU如何在顶点和片段着色器中处理它。就快要完成了,但还没结束,OpenGL还不知道它该如何解释内存中的顶点数据,以及它该如何将顶点数据链接到顶点着色器的属性上。下一步需要告诉OpenGL怎么做。

  • 相关阅读:
    java计算机毕业设计springboot+vue医院碳排放管理平台系统
    PHP排序sort()、asort() 和 ksort() 的区别及用法
    网站服务器怎么部署
    Typecho框架漏洞
    springboot uniapp毕业设计-基于Uniapp+SSM实现的Android的网店系统实现的App
    【探索微软 Edge:现代化的网页浏览体验】
    利用Anaconda安装pytorch和paddle深度学习环境
    leetcode:69. x 的平方根
    jvm 二之 栈帧内部结构
    Java23种设计模式-结构型模式之适配器模式
  • 原文地址:https://blog.csdn.net/thefist11cc/article/details/125904446