为什么OpenGL具有全局功能?

时间:2010-01-30 02:42:29

标签: c++ opengl paradigms

为什么openGL不面向对象?每个人都教授面向对象编程+设计模式,但OpenGL具有许多全局功能。 不是这种不好的风格吗?

5 个答案:

答案 0 :(得分:17)

低级API的重点是尽可能简化和移植。给它一个面向对象的架构是不允许的:

  • 多态性增加了不必要的函数调用开销。
  • 它强迫您使用一些相对困难的调用约定,这会降低可移植性。
  • 您无法将面向对象的体系结构包装起来以使其具有程序性,但您可以反过来;所以,让事情尽可能灵活是有道理的。如果你愿意,可以在OpenGL周围编写一个面向对象的包装器。

最后,你应该真正质疑你所学到的关于OOP的内容。尽管你的学院或大学可能会告诉你,OOP并不是程序设计的灵丹妙药。有很好的理由说明为什么C ++ STL中绝对没有面向对象(以及大部分Boost)。

在某些情况下,面向对象很有用,但你应该知道什么时候有用,什么时候不用,在任何情况下都不应该认为任何不是OOP的东西都是“坏的风格”。

答案 1 :(得分:11)

的OpenGL

  • OpenGL应该支持所有平台 - 在这方面没有什么可以接近C - 多亏了几乎每个设备都可以使用相同的API
  • OpenGL应该支持所有语言 - 在这方面也没有任何接近C的东西 - 多亏了这一点,支持调用C库(几乎所有的)的每种语言都可以使用OpenGL
  • OpenGL是一个API,而不是一个引擎 - 它打算为图形硬件提供低级接口,但足够高级别,是对不同硬件的抽象 - C很多比C ++更低级别,OOP不低级
  • OpenGL是一个构建的框架,而不是一个完整的解决方案 - 没有一个和真正的方式来编写图形代码,OpenGL不应该强迫我们做任何事情 - 通过OOP会迫使我们进行“colution
  • OpenGL 与任何特定的编程范例联系在一起 - 因此我们可以将OpenGL包装成功能,逻辑或OOP语言 - 或者在程序上使用它
  • OpenGL与效率有关 - 你不能比直接函数调用更有效率。 OOP与适合特定任务的效率一样高。

一般来说 - OpenGL旨在让我们拥有所有的自由,并且不为我们做出任何选择。通过自由,我指的是选择平台,语言,编程范例,引擎设计,方法以及效率与可读性水平的自由。

为此我赞美OpenGL,为此我讨厌Direct X.

阿门。

旁注: 每个人都教授面向对象的编程,因为它是最容易掌握的。这不是唯一真实的范例。有功能编程,逻辑编程,契约编程,甚至是用C语言编写的面向对象的方式。计算机科学中没有一个真理。至于设计模式,我可以列举OpenGL架构中使用的几个。坏风格?我见过具有aaaaallll全局功能的漂亮的C程序......

答案 2 :(得分:8)

通常,OpenGL 面向对象。它只是用一种不直接支持OOP的语言实现的。但API是面向对象的:它由许多不同的对象类型组成,并在每个对象上定义了一组操作。并且每个对象类型的内部对用户是隐藏的。它满足OOP的所有要求。它碰巧在C中实现,它没有方便的类或成员方法语法。

除此之外,全球功能绝对没有问题。在C ++中,一个常见的建议是尽可能优先使用成员方法。在函数式编程中,全局函数是默认函数。

答案 3 :(得分:4)

答案 4 :(得分:4)

嗯,有几个原因。

  • 您应该将OpenGL上下文视为状态机。其中只有一个在任何时候都有效。在一切之前放一点Opengl.whatever没有区别。
  • 速度,OpenGL被设计为最小的API
  • 如果它是面向对象的,你会用什么语言编写它? C ++?然后每个人都会写复杂的绑定。 C很容易包装。