问题标签 [vbo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
771 浏览

exception - 导致系统退出的 OpenGL VBO 错误

我正在使用 JOGL 来加载 OBJ 模型并使用 VBO 在 GL 画布中显示它。大多数情况下一切正常,但是有些模型的顶点必须变形。例如,我有一个箭头对象,并且必须能够使箭头的杆变形以根据需要使尾部尽可能长/短,同时保持箭头的对象几何形状。这适用于渲染器的一个实例,但是当我尝试将另一个实例添加到场景中时,系统在 GLDrawElements 调用上退出并输出此错误日志。谁能指出我正确的方向?我完全不知所措。

0 投票
0 回答
607 浏览

ios - 您认为 iOS 设备的这两种 VBO 设置中哪一种更快?

在我做一个大数据集来测试之前,我想我会先挑选你的大脑,

您认为 iOS 设备的这两种 vbo 设置中哪一种更快?在 openGL-ES 1.x 环境中。

一个人设置一个空白的主 GL_ELEMENT_ARRAY_BUFFER 然后使用运行循环中的 glBufferSubData 用当时需要的任何索引数据进行子填充,

其他设置是事先设置单独的 GL_ELEMENT_ARRAY_BUFFER 并在运行循环中使用 glBindBuffer。

(在“DrawOutShape”下面的两种情况下都是运行循环中的唯一例程)

更新:供人们将来参考,我相信我在示例 3 中找到了最好的方法:(如果有错误请更正)。

快速提问:有没有更好的方法来执行此行“(GLushort*)(sizeof(GLushort)*shapetest2->deOffset)”

更新2:供人们以后参考,在伪实例化中,如果你此时要在iOS中实例化,没有办法在运行循环中设置你的数据(有很多块,然后旋转和缩放和放置)并且有一个在运行循环结束时单个 glDrawElements 以同时将它们全部绘制出来,在开始循环之前(不会使你的速度比现在更糟),你必须为你的运行循环中的每个“形状”都有一个 glDrawElements不幸的是....我已经确定openGL-ES或Apple在未来的版本中是否可以使用单个glDrawElements进行实例化,这可以显着提高FPS,比如5倍。这是一堵砖墙,阻碍了 ES 在 IMO 上的快速发展。

示例 1:

示例 2:

示例 3:

0 投票
1 回答
1874 浏览

c++ - Opengles 混合 VBO 和非 VBO 渲染给出 EXC_BAD_ACCESS

大家好。我试图呈现如下所示的两种方法。RenderA() 正在使用 VBO,而 RenderB() 不是。当它到达 RenderB() 中的 glDrawArrays() 时,我得到一个 EXC_BAD_ACCESS 错误。

如果我不创建和使用任何 VBO,即当我注释掉 CreateVBOs() 和 RenderA() 时,RenderB() 工作正常。

  1. 那么这是否意味着一旦你开始使用 VBO,所有的渲染都必须使用 VBO?
  2. 或者我在这里做错了什么?

编辑(已解决)

弄清楚了。显然,如果之前绑定了缓冲区,您必须确保取消绑定缓冲区,以便在没有 vbo 的情况下进行渲染。

我的 CreateVBOs() 函数已绑定但没有取消绑定缓冲区,因此当 RenderB() 尝试使用 glDrawArrays 时,这就是造成错误访问的原因。解除绑定缓冲区只是将其绑定到 0,如下所示:

0 投票
3 回答
6517 浏览

java - OpenGL Java VBO

我正在使用LWJGL和 绘制立方体glBegin/glEnd,但我听说这种方法效率很低,我应该开始使用 VBO。我不知道它是如何工作的。

我想绘制不同大小和位置的立方体(无旋转),我认为我应该VBO为此使用 s 。

谁能给我一些示例代码或关于如何使用VBOs 的见解,Java或者即使VBOs 是最佳选择?

0 投票
1 回答
1835 浏览

ios - glBufferSubData 在 iOS 上的表现很糟糕?

我不太明白为什么这段代码在 iOS 上的 GPU 速度很慢,这段代码在 Windows 上运行良好,没有任何问题。

基本上我正在做的是我有一个大的动态顶点缓冲区(GL_STREAM_DRAW),我尝试只更新它的一部分,单帧中的部分不应该重叠,所以它们不应该导致刷新,CPU不应该'不必等待 GPU 完成,但显然情况并非如此,即使在绘制 10 到 20 个三角形时,我在 iPhone 4 上也能获得大约 10 fps……而我的 PC 上使用相同的代码...

正如您在跟踪中看到的那样,我正在重用相同的缓冲区,但我要确保更新的部分不会重叠......我可以做些什么来提高性能?

0 投票
2 回答
392 浏览

iphone - vbo 只拥有相同大小的顶点?

OpenGL/OpenGLES VBO 是否只保存相同大小的顶点?

我之所以问,是因为我发现 glDrawElements 的参数仅具有索引缓冲区的偏移值(它的最后一个参数),这意味着: 1. 如果缓冲区已经部分填充,我必须在将它们提交给 IBO 之前手动偏移我的索引。无论如何,手动偏移索引很容易,所以这里不是问题。2. 用作顶点缓冲区的 VBO 必须拥有相同大小的顶点,否则索引无意义。

这种行为与 DirectX Vertex Buffer 不同,在 directx 中,有一个 SetStreamSource,可用于偏移 Verterx Buffer,以及 DrawIndexedPrimitive,您的 VB 可以保存任意大小的顶点。

也许 OpenGLES 1.1 版本的 SetStreamSource 不可用?也许 OpenGLES 2.0 会支持它?

我的目标平台是 iPhone OpenGLES 1.1,所以如果 GL 版本 SetStreamSource 不可用,我将放弃使用 VBO,因为:1. 它带来了更多麻烦(我将不得不分配许多持有不同大小顶点的 VBO) 2. 有无论如何都没有性能改进(OpenGLES 1.1 中没有硬件支持)

感谢您的阅读,非常感谢您分享有关在 OpenGLES 1.1 中使用 VBO 的正确方法的经验。谢谢。

0 投票
3 回答
934 浏览

c++ - 许多四边形,尽管 VBO 没有足够的 fps

我有一些时间,我读过关于 VBO 的文章,这就是我得到的:

http://img64.imageshack.us/img64/5733/fps8.jpg

好吧,比以前好多了。它是在发布时编译的。我使用 VBO(可能,如果一切正常的话)和 glDrawArrays 来绘制。

这是绘图代码。请给我建议如何优化它。我想要地形......呃几千 FPS,是真的吗?

那么我能用它做什么呢?(上面的代码是主要的绘图功能)

编辑

我已经移动了这个:

到我的主要功能。应该没有改善吧。

编辑2

现在,我也可以看到它正在吃内存。每隔几秒钟,程序内存使用量就会越来越多……怎么了?我不删除什么?

编辑3

好的,非常感谢。我已经将一些代码移到绘图函数之外并且......更多的 fps !非常感谢 !

http://img197.imageshack.us/img197/5193/fpsfinal.jpg

它是 640x640 块(大 40 倍)的地图,带有 650'000 个四边形(大约是 70 倍以上),并且仍然约为 170 fps。伟大的 !并且没有内存泄漏。再次感谢 !

0 投票
1 回答
3661 浏览

opengl - 使用 glDrawArrays 绘制 VBO 在 OpenGL 2.1 中有效,但在 OpenGL 3.x 中无效

代码核心(显示红色矩形):

当我将上下文切换到 OpenGL 3.x 时,此代码停止工作(我只能看到背景颜色),但是当我以与上面代码相​​同的方式初始化 VAO 然后我绑定 VAO 并调用 glDrawArrays 时,然后它工作。

可能是什么问题呢?如何在不使用 VAO 的情况下绘制 VBO?

(着色器非常简单,与仅乘矩阵和 ps 输出红色相比)

0 投票
3 回答
7105 浏览

opengl - 在 glDrawElements (OpenGL/VBO) 中为顶点和法线使用不同的数组

我目前正在用 OpenGL 编写一个 .obj 加载器。我将顶点数据存储在 VBO 中,然后使用 Vertex Attribs 绑定它。法线也一样。问题是,法线数据和顶点数据的存储顺序不同。

我想,我给 glDrawElements 渲染网格的索引被 OpenGL 用来获取顶点 VBO 中的顶点并获取法线 VBO 中的法线。

除了使用 glBegin/glVertex/glNormal/glEnd 来告诉 glDrawElements 使用顶点索引和法线索引之外,还有 opengl 方式吗?谢谢

0 投票
1 回答
1565 浏览

c# - 在 C# 中使用交错顶点的 VBO

我正在尝试使用 VBO 使用 OpenTK 在 C# 中绘制我的模型。在我的在线研究中,我在许多地方读到,将交错数据结构的大小设置为 32 字节的精确倍数是一种很好的做法,因此我编写了以下代码:

具体问题:

1.) 我的交错顶点数据结构应该是结构还是类?就 VBO 和/或内存占用而言,这会有所不同吗?(我决定使用结构,即使感觉不对,因为顶点一旦进入内存就不会改变。)

2.) 这个数据结构真的需要是 32 字节大小的倍数吗?(即,我是否需要一个“虚拟”填充成员来强制设置正确的大小?我在网上找到的所有示例都是用 C++ 编写的,所以我特别感兴趣的是相同的想法/动机是否会延续到 C#。

3.) [Serializable] [StructLayout(LayoutKind.Sequential)] 真的有必要吗?我从网上找到的一个例子中复制了这个,所以......