12

我正在研究 linux 和图形 API,但是我对如何在操作系统中实现 opengl 感到困惑。它只是一组使用内核与您的显卡“讨论”哪些像素要着色或不着色的库吗?如果是这样,那么我不知道管道的来源 - 3D 场景如何被光栅化以及着色器如何影响几何图形。

为什么 GPU 可以同时支持 DX 和 OGL 的着色器语言?- 着色器语言实际上适合哪里?- 它们是在运行时编译还是解释?

尽管使用了多个游戏引擎,但我本人对图形 API 并没有太多经验——通常,由于多层抽象,细节会远远丢失。

4

3 回答 3

3

我在这里彻底解释了:https ://stackoverflow.com/a/6401607/524368和这里https://stackoverflow.com/a/7967211/524368

于 2012-06-16T22:50:20.837 回答
0

至少在大多数典型的显卡上,大部分 OpenGL 管线(固定的或可编程的)都是在图形硬件本身中实现的。DirectX 更是如此(即,DirectX 在 OpenGL 中缺少很多当前硬件不直接支持的功能)。

着色器通常被编译。显卡有一个特殊用途的处理器(或者,通常不止一个),所以编译器接受着色器语言的输入并将其转换为该处理器的汇编语言,就像 C 编译器为 CPU 所做的那样。支持不同的输入语言与支持 C、C++、Pascal、Fortran、Cobol 等输入的单个 CPU 并没有太大的不同。

于 2012-06-16T22:08:10.717 回答
-1

我无法谈论 API 是如何实现的。

但我确实从经验中知道着色器是编译的。因此,您编译它们并将它们发送到执行它们的 GPU。

于 2012-06-16T22:02:35.950 回答