programmable blending

刚接触这个概念的时候 挺激动的 因为能解决很多管线里面的问题 比如

切一次rt再切回来

为了做read write same rt

有了这个 就不用切啦 可以在一个pass里 read write同一块rt啦

还能解决画了opque 切出去做后处理 再切回来画transparent 本质上不用pb无法用一个pass解决还是因为这里为了给transparent做softedge时要读原来的depth所以和上面是一样的

这个的核心就是用attachment 来comebine rts(就像mrt所以这就是framebuffer fetch -ogl那个扩展的功能)

理解到这层 我之前把它pb和image block弄混了

image block能做的是 控制tile的那个layout

它的语法是这样

FragData是个数据结构

像这样

struct FragData

{

half4 color;

}

Imageblock的存在可以在中途改变这种layout

像这样或者这样

所以这货 image block本质上就是个pixel local storage呀

对比看 programmable blending它的语法和数据是这样

把input gBuffers  output了

也就是说 输入输出都是一块buffer的时候 programmable blending就会被开启

而image block 允许你在shader里定义一个结构体来处理tile memory,不需要attachement的参与了(rtv,dsv)

你可以用ib在shader change这些layout以合并pass

可以用它来做msaa 下的transparent

说回deferred lighting那个案例

如果用programmable blending来做 因为attachement参与的缘故 需要你把它设置为memoryless

也可以用image block来做这样 就没有attachment什么事情了 也就不需要处理它了

要用image block change layout

需要tile shading

这货 dispatch a configuable thread group per tile 也可以per pixel
看着像用compute shader的实现 就是作用在一块tile上的cs

在tileshader操作 image block

然后可以让这部分数据在tile memory了

生成的数据和fragment共享时通过 threadgroup

也能让这部分数据在tile memory上

语法如下

上面的是tileshader下面是fragmentshader

他们有一个共同的参数 active_light_mask用threadgroup 声明成共用在tilemem上

===================

总体来说因为 imageblock和programmable blending的功能很类似 所以语法也很类似

首先声明在 params里面的 imageblock需要和rt的结构一致

然后 你就可以在tile shader里用它啦 和programmable blending的用起来是一样的

给fragment那步也是用imageblock 声明在params里面

frag_data.read(thread_local_position);

frag_data.write(thread_local_position);

apple挺坑的 他在ppt里给的这段代码编译不过 要改改才能跑。。。还可以这样吗

==================================

persistent thread group

这个 在初始化那里用

[cmd setTheradgroupMemoryLength: size offset:0 atIndex:0]

声明 多了的往下排排坐

最新文章

  1. jquery lazyload延迟加载技术的实现原理分析
  2. Windows Phone 二、WP控件
  3. split,slice,splice,replace的用法
  4. SpringMVC常用注解實例詳解3:@ResponseBody
  5. 【GoLang】tcmalloc && jemalloc
  6. findstr 命令
  7. 大熊君说说JS与设计模式之------单例模式Singleton()
  8. Project和Module的介绍
  9. Android查询:模拟键盘鼠标事件(adb shell 实现)
  10. 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
  11. PHP之图形处理
  12. Python 基础【第三篇】输入和输出
  13. 百部BBC经典纪录片,附地址,需要的请抱走
  14. Spark Executor Driver资源调度小结【转】
  15. Java中间件:淘宝网系统高性能利器(转)
  16. 【转】用systemJS+karma+Jasmine+babel环境去编写简单的ES6工程
  17. libcurl.a 跨平台
  18. kbmMW基于硬件生成随机数
  19. WordPress主题开发实例:get_term_by()获取指定分类链接
  20. Java I/O 操作及优化建议

热门文章

  1. vue组件库element-ui 的Table内容显示不更新
  2. vue加载优化方案
  3. poj3449(判断直线相交)
  4. JavaWeb开发常用的前端控件
  5. (十三)mybatis 整合 ehcache
  6. (六)Spring 中的 JdbcTemplate
  7. 160个creakme(八)
  8. Win10环境下,告别MarkdownPad,用Notepad++搭建编写md文档的环境
  9. .net core 根据数据库生成实体类
  10. Dual 表