gpt4 book ai didi

Opengl、DrawArrays 无需绑定(bind) VBO

转载 作者:行者123 更新时间:2023-12-02 09:00:37 24 4
gpt4 key购买 nike

我正在使用自定义顶点着色器渲染点数组。着色器看起来像:

void mainVP()
in varying int in_vertex_id : VERTEXID
{
foo(in_vertex_id);
}

所以我唯一需要的就是顶点 id。但我需要很多顶点,并且我不想为它们存储假 VBO(它需要大约 16mb 内存)。

我尝试在不绑定(bind)任何 VBO 的情况下运行我的代码。有用。所以我的渲染看起来像:

size_t num_vertices = ...
glDrawArrays(GL_POINTS, 0, num_vertices);

但是我可以确定不绑定(bind)VBO的渲染是安全的吗?

最佳答案

But can I be sure that rendering without binding VBO is safe?

你不能。

OpenGL 规范的核心配置文件(3.2 及更高版本)明确指出应该允许它,您可以在禁用所有属性的情况下进行渲染。 OpenGL 规范的兼容性配置文件或 3.2 之前的任何版本都清楚地表明您不能执行此操作。

当然,无论如何,这并不重要。 NVIDIA 驱动程序允许您在任何 OpenGL 版本和配置文件上执行此操作。 ATI 的驱动程序不允许您在任何 OpenGL 版本或配置文件上执行此操作。它们都是驱动程序错误,只是方式不同。

您只需要接受您需要一个虚拟顶点属性即可。但是:

But I need a lot of vertices and I don't want to store fake VBO for them (it takes around 16mb of memory).

虚拟属性将占用 4 个字节(单个 float 或规范化字节的 4 向量。记住:您不关心数据)。因此,您可以在 16MB 中容纳 400 万个。

或者,您可以通过 glDrawArraysInstanced 使用实例渲染。在那里,您只需渲染一个顶点,但带有 num_vertices 实例。当然,您的着色器必须使用实例 ID。

关于Opengl、DrawArrays 无需绑定(bind) VBO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8039929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com