gpt4 book ai didi

c# - OpenGL 渲染函数顺序

转载 作者:行者123 更新时间:2023-11-30 15:54:39 25 4
gpt4 key购买 nike

我正在使用 OpenGL 在 Voxel 游戏中渲染 block block 。每个chunk都有自己的vertex buffer,现有的render函数(简化)如下:

foreach (Chunk c in chunks)
{
glBindBuffer(BufferID.Array, c.handle);
if (c.dirty)
{
glBufferData(BufferID.Array, ... , BufferUsage.StaticDraw);
c.dirty = false;
}

// For position, normal, colour and UV
glEnableVertexAttribArray(...);
glVertexAttribPointer(...);

glUseProgram(shader.Handle);
glDrawArrays(DrawMode.TriangleStrip, 0, c.vertexBuffer.Length);
}

上面的代码有效,但是 glEnableVertexAttribArray、glVertexAttribPointer 和 glUseProgram 的 CPU 使用率很高。

我可以在循环开始之前调用这些函数,还是必须在每个 glBindBuffer 之后调用?

最佳答案

在出现顶点数组对象 (VAO) 之前,您确实必须在需要更改内存布局和/或指针时重新进行绑定(bind)。然后引入了顶点数组对象,有一段时间人们很伤心,因为当时的驱动程序的性能仍然有很多不足之处(在撰写本文时,这是大约 10 年前——时间过得真快)。从那时起,司机们进步了很多。

本质上,VAO 存储哪些缓冲区绑定(bind)到哪些属性,以及这些绑定(bind)的内存布局。 https://www.khronos.org/opengl/wiki/Vertex_Specification#Vertex_Array_Object

关于c# - OpenGL 渲染函数顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49971988/

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