【OpenGL随笔】04_着色器编译

本文详细介绍了OpenGL中的着色器编译和链接过程,包括创建和验证着色器对象,以及如何将它们链接成着色器程序。此外,还探讨了着色器子程序的概念,展示了如何实现动态函数调用,以及GLSL中子程序的声明、定义和使用。最后,提到了独立的着色器对象在处理不同片元着色时的应用。

1. 着色器编译

1.1 着色器编译的命令序列

screenShot.png

1.2 加载着色器步骤

对于每个着色器对象

  • 创建一个着色器对象;
  • 将着色器源代码编译为对象;
  • 验证着色器的编译是否成功。

然后需要将多个着色器对象链接为一个着色器程序,包括

  • 创建一个着色器程序;
  • 将着色器对象关联到着色器程序;
  • 链接着色器程序;
  • 判断着色器的链接过程是否成功完成;
  • 使用着色器来处理顶点和片元。

2. 着色器子程序

2.1 函数的动态调用

如果需要动态地选择调用不同的函数:

  • 可以创建两个不同的着色器;
  • 或者使用 if 语句来进行运行时的选择,例如:
#version 330 core

void func_1() {
   
    ... }
void func_2() {
   
    ... }

uniform int func;

void
main()
(
    if (func == 1)
        func_1();
    else
        func_2();
)
  • 着色器子程序在概念上类似于C语言中的函数指针,它可以实现动态子程序选择过程。
  • 在着色器当中,可以预先声明一个可用子程序的集合,然后动态地指定子程序的类型。
  • 然后,通过设置一个子程序的
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值