GLSL和c有什么区别?

时间:2011-12-29 04:38:54

标签: c++ c qt glsl

我在这里有三个问题:

  1. Qt / 3D API是否由GLSL代码实现?
  2. GLSL代码是作为普通的c / c ++代码编译和链接的,它可以在CPU(不是GPU)上运行吗?
  3. 为什么GLSL在渲染方面比普通的c / c ++更好?

2 个答案:

答案 0 :(得分:12)

您似乎对GLSL的含义存在根本性的误解。它不是图形的编程语言。它是着色器语言。

OpenGL rendering pipeline中,渲染对象的某些阶段是由程序实现的。这些阶段称为“着色器阶段”。着色器是一个用GLSL(至少用于OpenGL)编写的程序,它在其中一个着色器阶段执行。

GLSL用作渲染过程的一部分。 GLSL定义了如何呈现的内容,而不是呈现的

因此:

  

Qt / 3D API是否由GLSL代码实现?

不是你的意思。绘图函数的一些渲染管道可能是。但它可能不会。这与你并不真实相关,因为你从外面使用它。

  

GLSL代码是作为普通的c / c ++代码编译和链接的,它可以在CPU(不是GPU)上运行吗?

不,如上所述。着色器会影响渲染,渲染会在GPU上进行。 GLSL是OpenGL的着色语言,因此GLSL代码在GPU上执行。

  

为什么GLSL在渲染方面比普通的c / c ++更好?

不是更好或更坏;你不能使用一个用于另一个。您不能只是将随机C代码作为渲染管道的一部分投射到GPU上。而且你不能为CPU编译GLSL。

GLSL就是我们所说的domain specific language。它是一种旨在促进特定目的的语言。它具有大多数语言根本没有的语言结构。它知道什么是“纹理”。它具有值的概念,它在单个渲染调用(制服)中的着色器的多次执行中是不变的。它还有许多其他概念,这些概念对于基于硬件的着色器和渲染问题是独一无二的。

你不仅不能在GPU上抛出C或C ++,你也不愿意。不适用于着色器。

答案 1 :(得分:4)

  

Qt / 3D API是否由GLSL代码实现?

不是真的。它可能在内部使用一些,但这些都是用户隐藏的。 API本身就是C ++。 OpenGL的API在C中,尽管它(驱动程序)在内部使用程序集。

  

GLSL代码是否作为普通的c / c ++代码编译和链接

不,当然不是。它由视频卡驱动程序编译并在GPU上运行。这是一种相当有限的语言,除了着色器之外没什么用处。

  

为什么GLSL在绘画方面比普通的c / c ++更有天赋?

它包含GPU擅长的功能,但缺乏功能却很糟糕。