繁体   English   中英

GLSL和c有什么区别?

[英]What's the difference between GLSL and c?

我在这里有三个问题:

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

您似乎对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 ++,而且也不想这么做。 不适用于着色器。

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

并不是的。 它可能在内部使用,但对用户而言则全部隐藏。 API本身是C ++。 OpenGL的API用C语言编写,尽管它(驱动程序)在内部使用汇编语言。

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

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

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

它包含GPU擅长的功能,而缺少GPU擅长的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM