查看: 2241|回复: 3

OSG源代码中写死的shader,使得IOS下用OpenGL ES 2.0编译osg,运行失败

[复制链接]

该用户从未签到

发表于 2013-8-9 15:32:43 | 显示全部楼层 |阅读模式
之前用OpenGL ES 1.0没有问题。因为我要自定义shader,所以我要在ios下用OpenGL ES 2.0来编译osg。我按照http://trac.openscenegraph.org/p ... Community/OpenGL-ES 文章中所述,设置好了cmake选项的值。编译通过。但是运行的时候,报出一系列的错误。根据错误提示,发现是代码中写死了很多shader的字符串,但是这些字符串是基于opengl的,在opengl es中是错误的。把这些shader给注释后,也只能显示出一个空的场景,插入任何模型都是失败的。请问,这该怎么解决呢?源码中不应该写死shader吧?

该用户从未签到

发表于 2013-8-12 10:18:33 | 显示全部楼层
您运行的程序包含了什么功能?并不是所有OSG提供的类都可以在GLES下使用的

该用户从未签到

 楼主| 发表于 2013-8-12 14:25:26 | 显示全部楼层
我就算是用OSG_GLES2_AVAILABLE编译那个simpleExample。在运行的时候,会发现在osgViewr/view.cpp的setScenceData函数有下面的语句
#if defined(OSG_GLES2_AVAILABLE)
            osgUtil::ShaderGenVisitor sgv;
            getSceneData()->getOrCreateStateSet();
            getSceneData()->accept(sgv);
#endif
然后在ShaderGenVisitor 就会用写死在代码中的字符串来生成shader。
那是不是连osgViewer类都不能用呢

该用户从未签到

发表于 2013-8-13 10:36:02 | 显示全部楼层
不知道您是否用了不够新的版本,ShaderGenVisitor的作用就是把固定管线的内容自动转换到shader代码。不过这个类本身在不断改进中所以不排除它生成的代码存在不兼容性。您在代码中把这几行去掉也是可以的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表