我目前正在实习,其中一位培训师说“着色器是面向对象的”作为面向对象编程的一个例子。对我来说,这意味着 HLSL 和 GLSL 是面向对象的语言。
我从没想过着色器是面向对象的。
但是现在当我看到这个时:https://www.khronos.org/opengl/wiki/Data_Type_(GLSL)
vec4 someVec;
someVec.x + someVec.y;
由于点,我也看到了面向对象。现在我很困惑。
2 年前我开始使用 OpenGL 和 GLSL,我从来没想过 GLSL 是面向对象的。
所以我有点错过了一个重点。
我知道这些着色器语言 HLSL/GLSL 源自它们的汇编语言。
有人可以说明 GLSL 是否确实是面向对象的。
最佳答案
不,OpenGL Shading Language不是面向对象的。 glsl 中没有方法(甚至 inheritance and polymorphism )。
数据类型的行为更像是 C 中的结构,而不是 C++ 中的类。但当然还有其他选项 Constructors and initialize glsl 数据类型分别是一些特殊的 Vector and Matrix Operations和组件可以通过 Swizzling 访问.
但这使得语言不是 Object-oriented语言,因为对象的概念需要对象中包含的数据和过程(方法)字段。在 glsl 中,缺少方法的一般概念。
关于opengl - 一般问题 : Are Shading Languages/shaders object-oriented?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58461958/