OpenGL超级宝典(第7版)之第十章计算着色器

OpenGL超级宝典(第7版)之第十章计算着色器


前言

利用GPU的计算能力运算
不同于其他着色器,它可以实现互相同步和共享数据
无固定输入或输出,不与其他任何固定管线工序相接,灵活性高,具有其他工序不具备的功能

一、使用计算着色器

计算着色器必须是单独的程序,不能组合其他着色器(顶点、曲面细分、几何、片段)

1.执行计算着色器

简述:计算着色器在工作组中执行,有且只有一个全局工作组发送到opengl执行,全局工作组下有多个局部工作组,每个局部工作组都有自己的工作项(3D区块),每个工作项可以在计算着色器的布局限定符设置
glDispatchCompute()和glDispatchComputeIndirect():设置局部工作组的个数
glGetIntegeri_v():获取局部工作组的工作状态,例如:全局工作组的最大尺寸(局部工作组的数量),一个局部工作组的容积
glGetIntegeriv():获取一个局部工作组的容积

计算着色器的输入与输出:
简述:无内置输出,是一个单工序管线,内置变量可以确定局部工作组和工作项的位置(索引)
gl_WorkGroupID:局部工作组在全局工作组的索引,例如:gl_WorkGroupID.x、gl_WorkGroupID.y、gl_WorkGroupID.z
gl_LocalInvocationID:工作项在局部工作组的索引,例如:gl_LocalInvocationID.x、gl_LocalInvocationID.y、gl_LocalInvocationID.z
gl_NumWorkGroups:局部工作组的调用总数
gl_WorkGroupSize:工作项的调用总数
gl_LocalInvocationIndex:将工作项中的3D变量转换成1D索引
可以使用imageStore、atomics当成着色器输出,写入到着色器存储区块,例如:图像倒置

2.计算着色器通信

简述:计算着色器可以通过有限个共享存储限定符声明变量通信,访问速度很快
同步:通过barrier()函数,注意竞争条件和barrier()对竞争条件的影响
示例:并行前缀和、景深的应用

计算着色器群集:
简述:个体的行为仅基于其对周围其他群体成员的感知,成员之间并没有就某项决定产生任何合作关系,例如:鱼群没有领头鱼
示例:集群的纸飞机

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值