GLSL和c有什么区别?

gem*_*eld 0 c c++ qt glsl

我这里有三个问题:

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

Nic*_*las 12

你似乎对GLSL是什么有一个根本的误解.它不是图形的编程语言.它是一种着色器语言.

OpenGL渲染管道中,渲染对象的某些阶段设计为由程序实现.这些阶段称为"着色器阶段".着色器是一个用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就是我们所说的领域特定语言.它是一种旨在促进特定目的的语言.它具有大多数语言根本没有的语言结构.它知道什么是"纹理".它具有值的概念,它在单个渲染调用(制服)中的着色器的多次执行中是不变的.它还有许多其他概念,这些概念对于基于硬件的着色器和渲染问题是独一无二的.

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

  • 就OpenGL规范而言,没有提到任何"仿真模式",但那是因为它是一个API规范; 类似地,规范没有提到GPU,当然也没有强制要求"在GPU上进行渲染".也就是说,各种驱动程序(当你指出MesaGL时)提供了一个纯软件实现,它只在CPU上运行.实际上,MesaGL主页上的**Introduction**明确提到Mesa可以用于从SOFTWARE EMULATION到现代GPU的完整硬件加速的许多不同环境中. (4认同)