ios - 金属着色器中的 GLSL gl_FragDepth 等效项
问题描述
我正在寻找调整金属着色器中的片段深度。以前我是通过 GLSL 的内置输出变量gl_FragDepth 来实现的。是否有在 iOS 上使用 Apple 的 Metal 着色器的等效方法?
解决方案
是的,您使用depth
从片段着色器返回的结构成员的属性来指定它。例如,您将创建一个类型,例如:
struct FragmentOut {
half4 color [[color(0)]];
float depth [[depth(any)]];
};
然后,在您的片段函数中,创建此结构的一个实例,填充并返回它:
fragment FragmentOut my_frag_function(...) {
FragmentOut out;
out.color = // compute fragment color (for first color attachment)
out.depth = // compute fragment depth
return out;
}
请注意,除了any
,您可以指定greater
或less
作为 depth 属性参数之一,这表示您提供的片段深度将分别大于或小于插值片段深度。这些说明符的语义与 OpenGL 中的同名说明符相匹配,您应该尽可能使用它们进行优化。
推荐阅读
- html - 如何在 R-Markdown html 文件中包含(和显示)多页 PDF?
- javascript - Vue js过滤器在某些移动设备上不兼容
- php - Laravel 5.6 外观/别名未注册/工作
- vue.js - Object.assign 打破 v-for(功能组件)
- c# - 可空 int 的 GetType 返回与 int 的 GetType 相同
- python - 用 LIME 解释 CNN (Keras) 输出
- c# - Xamarin - 实体框架 - SqLite - GetItemsAsync:无法打开数据库文件
- java - Maven 全新安装上的 Junit 测试失败-在测试资源文件夹中加载文件
- c# - 如何防止 MVC 中的自动编码?
- python - 查询firestore数据时有没有办法设置范围?