- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在再次尝试 OpenGL,我想知道如何设计稍后呈现的类。现在,只有一种类型的形状,所以我创建了一个 Shape
类,它有一个静态 VAO 成员,当第一个时调用 glGenVertexArrays(1, &vao)
Shape
实例被创建。现在有一个方法void Shape::render()
:
void Shape::render()
{
glBindVertexArray(vao);
glDrawArrays(GL_TRIANGLES, foo, bar);
}
这是个好方法吗?我的意思是,当 Shape
的所有实例都在实际程序中绘制时,会重复调用绑定(bind) Shape::vao
,但我猜它不会如果 vao
当前已经绑定(bind),则实际上不执行任何操作。猜对了吗?
另外,前段时间看到一个教程,在render()
的最后调用了glBindVertexArray(0)
。当有很多形状时,这不是潜在的性能损失吗?
最佳答案
but my guess would be that it doesn't actually do anything if vao is already bound currently. Is that guess correct?
是的。就正确性而言,重新绑定(bind)已经绑定(bind)的东西不是问题。
不过,它可能会增加一点性能损失。在这种情况下,一个合理的 GL 实现可能不会做太多事情,但是您仍然可以调用 GL 库,它必须在它有机会什么都不做之前找到线程的当前上下文。因此,可能如果您将当前的 VAO 缓存在您身边并且只在它实际发生变化时才调用 GL,您的情况可能会更好。但这是只有分析/基准测试才能告诉您的事情。如果您有数千甚至数百万个实例,那可能会成为一个真正的问题 - OTOH,如果每个实例都有一个单独的绘制调用,那么无论如何你都会被搞砸 - 在这种情况下你应该研究实例化渲染。
Also, I saw a tutorial some time ago that used to call glBindVertexArray(0) at the end of render(). Wouldn't that be a potential performance loss when there are many shapes?
是的。大多数教程这样做是为了一些“清洁”,但在大多数情况下这确实是在浪费时间。如果您可以(并且实际上打算)在“未绑定(bind)”状态下执行某些操作,则取消绑定(bind)某些 GL 对象只是一个有用的操作——比如 FBO 0,它只是默认的帧缓冲区。对于 VAO,在核心配置文件中,VAO 0 完全没用,无论如何你都必须在绘制之前绑定(bind)一个 - 所以你通过取消绑定(bind)中间的任何其他 VAO 没有任何好处。
关于c++ - 调用 glBindVertexArray(vao) : what does it do if 'vao' is already bound, 以及如何相应地设计形状类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099253/
我正在尝试使用顶点数组对象在 opengl 中渲染立方体。相同的代码适用于 linux 机器,但不适用于 Windows 机器。使用 glGenVertexArrays 和 glBindVertexA
我想做的是使用 glDrawElements 进行无顶点冗余的绘制,如下所示: Model ModelManager::CreateModel(std::vector&vertices, std::v
我目前正在学习 openGL,并试图了解 VBO 和 VAO 之间的关系。 据我所知,VBO 就是一个数据缓冲区,仅此而已。为了将该数据传递到 OpenGL 管道,我需要将该 VBO 数据绑定(bin
我刚开始尝试学习 opengl,在将代码的各个部分解耦为类的过程中,我遇到了问题。 这是一个非常简单的问题。在下面的代码中,如果 Mesh 构造函数底部的 glBindVertexArray(0) 被
我确信如果您通过 glBindBuffer() 绑定(bind)一个缓冲区,您可以安全地假设它保持绑定(bind)状态,直到目标通过另一次调用 glBindBuffer()。因此,当我发现调用 glB
我是 OpenGL 和图形编程的新手。到目前为止,我一直在阅读一本非常透彻且写得很好的教科书。但是,我在代码中遇到了一个我不太理解的点,我想在我理解这些行之前继续前进。 GLuint abuffer;
我正在再次尝试 OpenGL,我想知道如何设计稍后呈现的类。现在,只有一种类型的形状,所以我创建了一个 Shape 类,它有一个静态 VAO 成员,当第一个时调用 glGenVertexArrays(
我正在制作一个 WebGL 程序并需要 GL 函数 glGenVertexArrays 和 glBindVertexArrays。有人知道 WebGL 中是否有这些等价物吗?这是我到目前为止所拥有的:
我正在尝试在 Xcode 5 (Mac OSX 10.8.4) 上为我的 OpenGL 项目设置 GLFW3。我已成功安装并将我的项目链接到 GLFW3,没问题。我什至用该项目成功创建了一个窗口,并且
我是一名优秀的程序员,十分优秀!