我要发帖 回复

中级会员

3

主题

143

积分

0

专家分

:

私信
发表时间 : 2007-12-21 22:08:10 | 浏览 : 3221    评论 : 16
我使用BCB6.0,易用但许多开源软件不考虑支持它。
一直有心使用osg做开发,但以前的版本无法在bcb下编译通过,二进制库又不兼容,只好作罢。
现在osg2使用CMake作为跨平台编译解决方案,我做了尝试,经过少量的代码更改除了plugin都可以在BCB6中编译通过,plugin依赖第三方开源项目,需要自己在BCB下编译。
正在研究,有兴趣的可以回帖联系。

最近VR访客

hahawoo 评论于2008-1-19 17:28:18
现在正在研究bcb+虚拟现实开发!支持!希望和楼主交流!
FlySky 评论于2008-1-19 17:40:22
楼主可以把编译的过程写成一篇教程发布出来,供初学者学习学习,呵呵~~~~~~~

OSG中国官方网站:http://www.osgChina.org
OSG中国官方讨论区:http://bbs.osgChina.org

OSG专业群-OSG地形研究者 49668412
      OSG地形专业研究 45763709
dlut8417 评论于2008-2-28 08:40:09
我最近也在做bcb + osg
据说需要用cmake 预先编译osg 文件
可是出现错误了
不知搂住是否出现这样的错误
konlytest 评论于2008-3-9 21:46:26

最近太忙,一直没来得及

全部源代码太大,过两天把修改过的部分发上来!
FlySky 评论于2008-3-9 22:46:00
期待楼主可以写一篇关于这方面的教程出来~~~~·可否留下QQ交流一下~~~

OSG中国官方网站:http://www.osgChina.org
OSG中国官方讨论区:http://bbs.osgChina.org

OSG专业群-OSG地形研究者 49668412
      OSG地形专业研究 45763709
dlut8417 评论于2008-3-10 16:39:22
用make 编译的时候出现openThreads 的语法错误
不知道搂住怎么解决的阿?
konlytest 评论于2008-3-18 22:26:44

编译日志

OpenSceneGraph-2.3.5编译需要用CMake生成makefile然后在命令行中make -fMakefile编译
OpenSceneGraph-2.3.5除插件外在BCB6下编译通过,但运行似乎有问题,我做了如下修改供大家参考,不对之处请修改:
有些第三方插件需要手工建立BCB6的make文件,有兴趣的可以帮我一把
C:\OpenSceneGraph-2.3.5\applications\osgarchive\osgarchive.cpp(79):                 else if (fileType==osgDB::DIRECTORY_)//TODO:BCB6 DIRECTORY 有名字冲突改为 DIRECTORY_
C:\OpenSceneGraph-2.3.5\include\osgShadow\OccluderGeometry(26): //TODO:BCB6 using namespace osg;
C:\OpenSceneGraph-2.3.5\include\osg\Matrixd(13): //TODO:BCB6
C:\OpenSceneGraph-2.3.5\include\osg\Math(45): #if defined (sun) || defined (__APPLE__) || defined(__BCPLUSPLUS__)//TODO:BCB6
C:\OpenSceneGraph-2.3.5\include\osg\Math(94):     defined (APPLE_PRE_10_2) || defined(__BCPLUSPLUS__)//TODO:BCB6
C:\OpenSceneGraph-2.3.5\include\osgUtil\Optimizer(26): //TODO:BCB6
C:\OpenSceneGraph-2.3.5\include\osgViewer\Scene(52):         //TODO:BCB6 原名View和osg::View冲突,改为_View
C:\OpenSceneGraph-2.3.5\include\osgViewer\View(32): //TODO:BCB6 原名View和osg::View冲突,改为_View
C:\OpenSceneGraph-2.3.5\include\osgViewer\CompositeViewer(23): //TODO:BCB6 原名View和osg::View冲突,改为_View
C:\OpenSceneGraph-2.3.5\include\osgViewer\Viewer(23): //TODO:BCB6
C:\OpenSceneGraph-2.3.5\include\osgViewer\Viewer(28): //TODO:BCB6 原名View和osg::View冲突,改为_View
C:\OpenSceneGraph-2.3.5\include\osgViewer\GraphicsWindow(32): //TODO:BCB6 using namespace osg;
C:\OpenSceneGraph-2.3.5\include\osgViewer\GraphicsWindow(125):         virtual std::string getWindowName() { return _traits.valid() ? _traits->windowName : /*TODO:BCB6 (std::string)*/(std::string)""; }
C:\OpenSceneGraph-2.3.5\include\osgDB\FileUtils(36):         //TODO:BCB6 DIRECTORY
C:\OpenSceneGraph-2.3.5\include\osgSim\ImpostorSprite(31): //TODO:BCB6 using namespace osg;
C:\OpenSceneGraph-2.3.5\include\osgSim\ShapeAttribute(82): //TODO:BCB6 using namespace osg;
C:\OpenSceneGraph-2.3.5\include\OpenThreads\Thread(22): //TODO:BCB6
C:\OpenSceneGraph-2.3.5\src\osg\GraphicsContext.cpp(632):         //TODO:BCB6 GraphicsContext::
C:\OpenSceneGraph-2.3.5\src\osg\GraphicsContext.cpp(654):         //TODO:BCB6 GraphicsContext::
C:\OpenSceneGraph-2.3.5\src\osg\GraphicsContext.cpp(704):         //TODO:BCB6 GraphicsContext::
C:\OpenSceneGraph-2.3.5\src\osg\LOD.cpp(55):                                 //TODO:BCB6 0!=
C:\OpenSceneGraph-2.3.5\src\osg\State.cpp(42):         //TODO:BCB6 *
C:\OpenSceneGraph-2.3.5\src\osg\State.cpp(552):     if (unit>=_textureAttributeMapList.size()) return 0;//TODO:BCB6 return 0
C:\OpenSceneGraph-2.3.5\src\osg\Geometry.cpp(13): //TODO:BCB6
C:\OpenSceneGraph-2.3.5\src\osg\ComputeBoundsVisitor.cpp(13): //TODO:BCB6
C:\OpenSceneGraph-2.3.5\src\osg\AnimationPath.cpp(13): //TODO:BCB6
C:\OpenSceneGraph-2.3.5\src\osg\OcclusionQueryNode.cpp(386):         //TODO:BCB6
C:\OpenSceneGraph-2.3.5\src\osgUtil\Simplifier.cpp(230):                         //TODO:BCB6 (osg::ref_ptr<Point>)
C:\OpenSceneGraph-2.3.5\src\osgUtil\Simplifier.cpp(250):                         //TODO:BCB6 (osg::ref_ptr<Point>)
C:\OpenSceneGraph-2.3.5\src\osgUtil\IntersectionVisitor.cpp(27): //TODO:BCB6
C:\OpenSceneGraph-2.3.5\src\osgUtil\CullVisitor.cpp(280):                 //TODO:BCB6 CullVisitor::
C:\OpenSceneGraph-2.3.5\src\osgUtil\CullVisitor.cpp(307):                 //TODO:BCB6 CullVisitor::
C:\OpenSceneGraph-2.3.5\src\osgViewer\View.cpp(28): //TODO:BCB6 原名View和osg::View冲突,改为_View
C:\OpenSceneGraph-2.3.5\src\osgViewer\StatsHandler.cpp(21): //TODO:BCB6 原名View和osg::View冲突,改为_View
C:\OpenSceneGraph-2.3.5\src\osgViewer\ViewerEventHandlers.cpp(22): //TODO:BCB6 原名View和osg::View冲突,改为_View
C:\OpenSceneGraph-2.3.5\src\osgViewer\Renderer.cpp(31): //TODO:BCB6 原名View和osg::View冲突,改为_View
C:\OpenSceneGraph-2.3.5\src\osgViewer\CompositeViewer.cpp(13): //TODO:BCB6
C:\OpenSceneGraph-2.3.5\src\osgViewer\CompositeViewer.cpp(27): //TODO:BCB6 原名View和osg::View冲突,改为_View
C:\OpenSceneGraph-2.3.5\src\osgViewer\HelpHandler.cpp(22): //TODO:BCB6 原名View和osg::View冲突,改为_View
C:\OpenSceneGraph-2.3.5\src\osgViewer\Viewer.cpp(23): //TODO:BCB6
C:\OpenSceneGraph-2.3.5\src\osgViewer\Viewer.cpp(76):         //TODO:BCB6
C:\OpenSceneGraph-2.3.5\src\osgViewer\Viewer.cpp(84):         //TODO:BCB6
C:\OpenSceneGraph-2.3.5\src\osgDB\FileUtils.cpp(27):         //TODO:BCB6 _stati64
C:\OpenSceneGraph-2.3.5\src\osgDB\DatabasePager.cpp(1192):             //TODO:BCB6 databaseRequest = _dataToCompileList.empty() ? 0 : _dataToCompileList.front();
C:\OpenSceneGraph-2.3.5\src\osgDB\Registry.cpp(34): #if defined(__sgi) || defined(__BCPLUSPLUS__)//TODO:BCB6 tolower
C:\OpenSceneGraph-2.3.5\src\osgText\Font.cpp(341): //TODO:BCB6 using namespace osg;
C:\OpenSceneGraph-2.3.5\src\OpenThreads\win32\Win32Thread.cpp(22): //TODO:BCB6
C:\OpenSceneGraph-2.3.5\src\osgManipulator\AntiSquish.cpp(70): //TODO:BCB6 using namespace osg;
konlytest 评论于2008-3-18 22:38:51

附件怎么发?

BCB6_src.rar (176.22 KB, 下载次数: 50)
FlySky 评论于2008-3-18 22:57:00
楼主好人~~~~~~~~~~~~~

OSG中国官方网站:http://www.osgChina.org
OSG中国官方讨论区:http://bbs.osgChina.org

OSG专业群-OSG地形研究者 49668412
      OSG地形专业研究 45763709
konlytest 评论于2008-3-19 22:11:06

第三方库和插件需要手工建立makefile

有兴趣的共同参与
konlytest 评论于2008-3-19 22:16:40

或者用其他的方法

VC的Dll可以用BCB6 Wrap一下,这样就不必每次有版本更新都需要自己修改然后编译了
或者在OSG项目中申请开一个分支,共同进步更好
sevencat 评论于2008-3-20 09:02:40
纯C的DLL可以wrap,但导出C++的DLL不太容易wrap了。
konlytest 评论于2008-3-20 21:50:55

C++Dll也可以Wrap

需要用swig之类的工具生成一个COM接口的WrapClass在VC下编译,然后在BCB中直接调用,或者再wrap成BCB中习惯的Class。
我测试过irpascal,一个irrlicht的pas wrap,它采用了类似的方法,几乎所有Class的公有成员都被变成了一个纯C函数导出(函数名称被加上了一些修饰),然后再Wrap Dll中重新拼装成Class

[ 本帖最后由 konlytest 于 2008-3-20 09:59 PM 编辑 ]
konlytest 评论于2008-3-20 22:13:07

透过scripts沟通

osglua是一个osg的luawrap,lua可以在bcb中编译通过,其实可以透过lua和osg沟通,并且script可以放在exe外部方便更改,很灵活
konlytest 评论于2008-3-21 21:39:59

利用编译器的ABI接口,实现二进制Lib的转换?

这个可能是最高效的,也是最难实现的。
实现一个能够让Class跨越编译器的LibConvert实在不容易。
dlut8417 评论于2008-3-25 14:27:50
顶一个先
没看明白
呵呵
还是不懂怎么把CMAKE的错误给改过来

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-4-19 03:52 AM

返回顶部