现在的位置: 首页 > 综合 > 正文

no rule to process file … .frag!

2018年05月18日 ⁄ 综合 ⁄ 共 2800字 ⁄ 字号 评论关闭

麻痹被这个东西弄了一个下半夜,无比的窝火,直想揍人

虽说 Xcode 的运用越来越熟练,但是终究还是被 xcode 搞得很烦恼

xcode貌似不能对资源文件做实时的监控,有时候对资源文件做出了改动以后,

xcode真机测试并没有将新的资源文件拷贝到机器里面,害的我经常性的要clean然后再build

弄得人是相当的烦躁

几百个源码文件,有时候就因为资源文件考不进机器要rebuild,

麻痹多搞得几次我得浪费多少时间,所以说,XCode这一点做的非常不好,让我非常不满意!

浪费了我一个下半夜的时间,肯定火大,抱怨牢骚不可避免,我也不是圣人~~

诚心希望苹果能将这点改进一下,银子多了总得为开发人员的便利考虑一下吧?

回到正题:no rule to process file ... .frag!

这是我看到 子龙山人的一篇技术博文之后自己动手尝试所遇到的一个bug,

。frag文件是 cocos2d 2。0 渲染相关的一个特色,在我看来用起来是相当的神奇。

很遗憾,到现在过了十多个小时了,我还没有对shader的机制做真正的深入了解

全赖这个bug!

额外细节也可以参照我写的上一篇博文,那篇博文的论述在现在看来,还是相当的不成熟的!

至少在写完那篇博文以后,我又为这个bug花费了好几个小时的时间,

可谓是真正的百思不得其解

下面是项目的一种组成结构与运行模拟器得到的结果

黑屏 + no rule to process file ....frag

控制台日出大段大段的 

“..................380”

所以,如果你的shader是这么加入到项目里面的话,你很有可能就要头大了~

我开始就是这么弄的,因为不知道个中蹊跷,还以为是 target的相关工程设置出现了问题

一个劲儿地弄 Search Header Paths 里面的

Header search paths

也怪我怪我研究子龙闪人这篇技术博文不是时候

因为我刚才开始要研究怎么在 一个项目里面弄出几个target,

我的处女作便是将 cocos2d的源码部分打包成一个单独的 target(.a静态库)

我还以为是主程序 target 使用 静态库 target 所要包含的头文件路径不对,一个劲儿的改路径

后来事实证明我是越走越远,可以说我多花出去的几个小时的时间都用来修改头文件路径了~

很多时候事实就是这么残酷,明明你自己南辕北辙了你却好无所觉,费时又费力而毫无所得!

扯远了,拉回

其实子龙山人教程附赠的项目文件里面也给出了提示

不过这个提示也太他妈的隐晦了,一般人根本就是很难察觉到(我没有细看文章,扫一遍直接就跑示例工程了)~

我不知道他本人或者他翻译团队里面的人有没有为这个bug头疼欲裂过,但是我确实是这样了,

一张图胜千万言,我贴一组图,各位再和上面那张图对比一下就知道问题处在哪儿了~

对天发誓,我除了将Shaders文件夹由黄色改成蓝色,没有动其他任何手脚~

就是这么奇葩,能够正常运行了~ 至此问题解决!

解决方案就是:

加入Shaders 文件夹到工程里面的时候,

千万不能以 create Group reference 的方式加入(那样加入会是文件夹呈蓝色)~

而必须以 create file refference 的方式将装有 .frag,.vert 文件的文件夹加入工程!!

当然肯定还有一些要注意的地方,那就是 要用到的 Mask.frag 文件必须要按照前文所说的那样,

放进 target 的 Build Phases,Copy Bundle Resources 里面去~

操作过程中还要做一些尝试,如 clean整个工程(静态库,主程序target)后再build,删除模拟器或者

真机上面的app,各种各种。。

我试了将Shaders文件夹从Xcode里面删除引用,在彻底清理完所有targets以后再编译并拷贝到模拟器里面,

app黑屏了。

然后我又再试着将 Shaders文件加以 create group reference 的方式加入到工程里面,app正常运行~


问题的论述离不开具体的环境,下面我给出工程的完整目录,以及我改了几个小时所改动的地方,

以及在哪儿将 。frag文件添加到target 的  resource bundle~

(事实上我有一点没有阐明:即 cocos2d本身再带了一个装了n个  。vert,。frag文件的资源文件夹,

这个文件夹是要按照我上面要求的那样添加到项目中去的。但是真正要用到的做遮罩的那个Mask。frag文件,

是可以直接以  create file reference 的方式添加到项目中去的,不过要记得设置到 target 的bundle resources 里面去。

同时,完全按照上面的做了,编译的过程中还是会出现“no  rule to process file  ..frag” 警告。

不过现在不同了,只有 Mask.frag一个文件得到这样的警告,其他cocos2d自带的那一批shader文件不不会再

得到这样的警告,如果这样了的话,那就离成功不远了^ ^)


1.项目结构


2.让我钻牛角尖深陷误区几小时的地方(早点儿google就好了)


3.文件系统里面的项目结构



参考资料:http://www.iphonedevsdk.com/forum/iphone-sdk-game-development/39349-opengl-es-shader-bug-only-iphone-3gs.html

问题:

warning: no rule to process file '$(PROJECT_DIR)/Shader.fsh' of type sourcecode.glsl for architecture i386

最佳回答:

That warning means that xcode doesn't know what to do with your file. If you give it an .m file it will compile it, if you give it an .png file it will copy it; apparently it doesn't know what
to make of an .fsh/.vsh file, so it's probably *not* getting copied to your application bundle
.

If you open "targets" and your target you should see the build step that copies your other files. If you drag your two wayward sheep into that step then they'll get copied to the bundle too, which may fix the bug.

The warning will probably remain, though. Does anyone else know how to actually add a rule so that this file type gets copied automatically, like most resources?

抱歉!评论已关闭.