使用OpenGL时,C++相比于C#有哪些优势?

7

我开始对学习OpenGL感兴趣,想要了解在学习过程中使用哪种语言会更好。我已经非常熟悉C#,根据我的阅读,我可以使用Tao API从C#代码中与OpenGL进行接口交互。然而,从我阅读的内容来看,真正专业的OpenGL开发者通常是C++程序员。

当使用OpenGL处理3D图形时,C++相比C#有哪些优势呢?由于我对这方面是完全的新手,因此希望能得到任何反馈。


2
投票关闭。在Google上搜索“C# vs C++”,你会找到许多差异。基本上,复杂度与性能是最重要的区别。C++可以表现得更好,但如果你在C++方面经验不足,你编写的代码可能比等效的C#代码性能差。 - Polity
1
可能是使用C#和OpenGL?的重复问题。 - Ian Mercer
1
虽然我通常会投票关闭“语言X与Y的比较”这类问题,但我认为这个问题有其可取之处,因为它更加专注于提供有根据的答案……看看其他人怎么说吧。 - user166390
2个回答

5
使用C#来使用OpenGL有一些困难。
  1. 获取最新的SDK。Tao自2008年以来就没有更新了。OpenTK自2010年6月以来没有发布稳定版本。自2010年6月以来,OpenGL已经发布了两个版本。这意味着你无法从C#中访问很多功能。我不知道OpenTK的夜间版本有多稳定,但我通常不信任夜间版本。使用C/C++,你可以获取想要加载的任何函数指针。而在C#中,你只能使用你的工具包提供的内容。

  2. 在C#中处理缓冲区对象可能会非常痛苦。是的,有办法将统一值数组上传到缓冲区对象中。但是,在C#中构建交错的顶点数据,其中不同的组件具有不同的类型,要困难得多。在C和C++中,你可以直接访问内存。因此,很容易在每个顶点中存储一个3维浮点向量后跟随一个4维字节向量,所有这些都存储在16字节中。但在C#中,这更加困难。

  3. 图形代码通常是代码中性能关键的部分之一。如果你正在制作高性能渲染应用程序(如游戏),你通常希望C++所提供的控制权。因此,C#的许多好特性在这里起反作用。

使用C#唯一真正的优势是...它是C#。如果你认为这是一个优势,那么它就是一个优势。


也许使用C++/CLI会是"两全其美"的最佳选择? - Uwe Keim
2
@UweKeim:怎么做?当然,你可以获得垃圾回收(针对CLI部分),并且可以访问CLR标准库。但是你无法获得C#的任何好用语言特性。由于CLR标准库对于渲染器来说并不是非常有用,因此这并没有太大的优势。你最多只能将其用于与渲染器的交互,但这将使用纯C++编写。在这种情况下,你的渲染器不需要知道或关心它是从CLR中调用的。 - Nicol Bolas
嘿,Nicol,我知道这可能是一篇旧帖子,而且事情已经发生了变化,但它在谷歌的第一个搜索结果中,所以有些问题需要澄清, 其中之一是:我能否在C++中创建涉及这些复杂向量的通用函数,并将其提取到dll文件中,然后将该dll导入到C#项目中并调用该dll->函数,在c#中使用它们来开发游戏?也许像Unity3D那样? - RAMM-HDR

3
你最直接受益的优点是大量教程使用C语言编写的示例代码,而C++编译器可以轻松接受。
最广泛适用的优点是可移植性:C#是微软的宝贝,而在非微软平台上支持该语言的情况最好也只能说不太稳定。维基百科目前声称,C#的最新ISO标准为2.0,而微软已经发布了4.0并正在开发5.0!

仅供更新:根据MS BUILD 2014的消息,C# 5的ISO只有几个月的时间,而MS Roslyn则开放了编译器。就跨平台而言,C#确实正在取得进展。 - Kr0e

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接