在SKShader / iOS的.fsh着色器文件中使用OpenGL扩展

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SKShader / iOS的.fsh着色器文件中使用OpenGL扩展相关的知识,希望对你有一定的参考价值。

在我的ios应用程序中,我有一个带有TestShader.fsh扩展名的着色器文件GL_EXT_shader_framebuffer_fetch

#extension GL_EXT_shader_framebuffer_fetch : require
void main() {
     lowp vec4 destColor = gl_LastFragData[0];
     ...
}

根据apple-ref我可以使用扩展来获取目标颜色。然后我使用着色器作为

spriteNode.shader = SKShader(fileNamed: "TestShader.fsh")

但是着色器源无法使用输出进行编译

error: invalid preprocessing directive
#extension GL_EXT_shader_framebuffer_fetch : require

error: use of undeclared identifier 'gl_LastFragData'
lowp vec4 destColor = gl_LastFragData[0];

如果没有扩展,则会成功加载着色器。所以我的问题是 - 在iOS应用程序的着色器文件中包含OpenGL扩展的正确方法是什么?如果这很重要,我正在iPhone SE,iOS11,Xcode 9.2上运行

答案

正如apple forumapple doc所述

SKShader不支持OpenGL扩展

-_-

以上是关于在SKShader / iOS的.fsh着色器文件中使用OpenGL扩展的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit 着色器未与制服一起运行

在 iOS 上的 OpenGL ES 着色器中混合多个纹理会导致反向行为

Xcode 7 / iOS 9:在 SKNode 中使用 OpenGL 片段着色器未编译

iOS10 + SceneKit:使用自定义着色器渲染视频

根据 iOS 15 上的暗模式,Unity 着色器出现故障

初步了解3D着色器的概念