opengl - 一般问题 : Are Shading Languages/shaders object-oriented?

标签 opengl glsl

我目前正在实习,其中一位培训师说“着色器是面向对象的”作为面向对象编程的一个例子。对我来说,这意味着 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/

相关文章:

opengl - VBO等使用的 "OpenGL memory"在哪里以及使用什么

python - 带 OpenGL 的 Alpha 蒙版

c++ - glTexImage2D 不起作用,但将 FragColor 设置为 vec4(1.0, 0, 0, 1.0) 会给我红色图像

c++ - 从 .glsl 文件中读取 OpenGL 着色器语言

graphics - 如何判断片段的颜色是否为白色?

opengl - 每帧几何修改: OpenCL or GLSL geometry shader?

c++ - 手动计算gl_FragCoord

glsl - 如何创建多步径向渐变片段着色器

c++ - GLSL 和 FBOs - glActiveTexture 不起作用?

opengl - 为什么人们不将四面体用于天空盒?