0

我们看到随着每次 OpenGL 或 Direct3D 迭代,数据从系统逐渐传输到图形内存,首先是纹理,然后是顶点,现在甚至是着色器。如果这是获得性能的方法,为什么他们不能在 VRAM 上映射您需要的任何东西并完成它?将显存的着色器与显存的顶点分开是否太重要了?

4

1 回答 1

1

我们看到随着每次 OpenGL 或 Direct3D 迭代,数据从系统逐渐传输到图形内存

这不是我们所看到的。我们看到的是图形 API 的演变,使其抽象概念更接近硬件的实际功能。在 API 中没有缓冲区对象、着色器等概念的情况下,API 所做的一切都是浮云。让我们以陈旧的即时模式为例。最初的 GPU 实际上就是这样工作的。但是 2000 年之后构建的每个 GPU 都希望渲染成批的数据。执行即时模式调用需要 OpenGL 实现就地构建顶点数组,将顶点批处理到 glEnd 的单个绘制调用中。API 的变化反映了硬件的变化以及我们使用它的方式。

现在即使有着色器

你是什​​么意思?你指的是可分离的着色器对象吗?这与“移动它们”无关。

为什么他们不能在 VRAM 上映射你需要的任何东西

停止!OpenGL 没有定义显存。OpenGL 只定义了客户端内存服务器内存。还有一个非常非常抽象的对象模型,其中内存是不透明的,无法直接访问。哎呀,使用 OpenGL 缓冲区对象甚至不能保证将东西放在 VRAM 中。完全是抽象的!

区别就在那里,因为这就是底层架构的设计方式。您可以在图形 API 中看到的渐变是由于硬件设计的渐变。

将纹理放置在图形内存中总是有意义的,但是将顶点数据放在那里是后来才发明的。然后这个概念在广义数据对象上得到了扩展(它被称为“超级缓冲区”一段时间)。

将显存的着色器与显存的顶点分开是否太重要了?

你在那里写的是什么分离?着色器是抽象对象,VBO 是抽象存储,纹理也是抽象的。

于 2013-04-28T23:03:18.797 回答