OpenGL数据传输到图形卡



当您可以通过uniform将所有数据传输到图形卡时,为什么在OpenGL中需要缓冲区。例如:

#version 330
layout (location = 0) in vec2 pos;
void main()
{
gl_Position = vec4(pos, 0.0, 1.0);
}

为什么你需要上面的代码,当你可以有以下代码:

#version 330
uniform vec2 pos;
void main()
{
gl_Position = vec4(pos, 0.0, 1.0);
}

我真的看不到vao、vbo、ebo等的使用

让我们暂时忘记制服是制服的事实:它们的值在绘图调用中不会更改(因此您所要求的是不可能的(。

这类统一变量是通过调用某种形式的glUniform来设置的;工作";,对于要在整个场景中渲染的每个顶点,必须调用glUniform一次。对于整个场景,该数字很可能以百万为单位。因此,渲染的每一帧,都需要调用glUniform数百万次。

另外,它只提供一个值,在本例中是一个位置。如果顶点具有法线、颜色、纹理坐标或以上任意组合(或其他内容(,则需要为这些值中的每一个调用glUniform

如果场景中有1亿个顶点,并且每个顶点都有6个属性,那么这就是对该函数的6亿次调用每帧。这不是一个性能配方。

如果GPU可以查看自己的数据存储,速度会快得多,不是吗?而不是让CPU单独管理每一个数据量?如果要在多个位置渲染同一个模型,则尤其如此。按照您的方式,每次绘制该模型时,都必须再次调用所有glUniform。如果GPU只有数据,你可以说";用这些参数在这里渲染该模型;。

相关内容

  • 没有找到相关文章

最新更新