问题标签 [pbo]

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 投票
0 回答
51 浏览

asynchronous - Opengl 异步 PBO 读取

我正在开发一个需要从 openGL 帧缓冲区读回整个帧的应用程序。
为了提高性能,我将异步 glReadPixels 与多个 PBO 一起使用:

在阅读了一些教程后,我执行以下操作(例如,使用 2 个 PBO):

  1. 并条框 N (glDrawArrays)
  2. 开始从缓冲区异步读取 PBO N(见上文)
  3. 画框 N+1 (glDrawArrays)
  4. 从缓冲区开始异步读取 PBO N+1(见上文)
  5. 同步 PBO 读取 N (glMapBuffer)
  6. 进程 N
  7. 画框 N+2 (glDrawArrays)
  8. ...

这似乎工作正常,但我对管道有些担心。
通常,帧 N+1 (3) 上的绘图操作在帧 N (2) 的异步读取完成之前完成。
帧缓冲区是否被绘图操作覆盖?
如果 glReadPixels 异步运行 (2),帧 N 是否被此覆盖破坏?

0 投票
0 回答
22 浏览

opengl - 当内存地址已经固定时使用 PBO?

我正在尝试优化从 CPU 内存到 OpenGL 的纹理上传。

最初我使用glTexImage2D并且有效,但显然没有使用 DMA,所以我正在尝试使用 PBO。

不幸的是,我必须使用提供纹理数据的 API 为它们分配 CPU 内存并返回一个指针。我无法控制它在内存中放置数据的位置。

如果我创建一个 PBO 然后对其进行映射,我必须“手动”将我的数据移动到 PBO 分配的内存中,或者glBufferData在调用之前使用纹理数据对其进行初始化glTexImage2D。这似乎比完全不使用 PBO 慢得多。

我可以尝试任何其他技术,或者这只是 PBO 工作方式的限制?

0 投票
1 回答
189 浏览

c++ - 如何使用 QOpenGLBuffer:: PixelUnpackBuffer

我无法弄清楚如何正确地从QOpenGLBuffer:: PixelUnpackBuffer.

  1. 写入 PBO 之前的正确设置是什么?
  2. QOpenGLBuffer::write无法使用简单的QImage.bits(),或glReadPixels()将 FBO 渲染传递到 PBO。它必须是特定类型的数据吗?
  3. 您如何使用书面 PBO 和Texture::setData()? 一个简单的Texture.setData(*format*, *pixel_type*, pubo, nullptr)就够了吗?

这里有一些代码来举例说明我在做什么:

0 投票
0 回答
53 浏览

opengl - 用 pbo 生成 mipmap 太慢?

我正在开发一个类似视频的应用程序。
为了加快贴图上传的速度,我使用pbo来增加它。
为了处理锯齿伪影,我使用 mipmap 来帮助解决这个问题。
好吧,让我给你看主要代码

结果是帧率显着下降。
我认为原因是生成 mipmap 会破坏使用 pbo 异步上传纹理的优势。
据我所知,没有任何方法可以在纹理上传完成时自动生成 mipmap。
有没有提前?

0 投票
0 回答
78 浏览

opengl-es - 在 OpenGL ES Adreno GPU 中使用 PBO 从 FBO 纹理读回

我正在 Adreno GPU 上的 OpenGL-ES 3.0 应用程序中工作。

使用 FBO 的 Render-to-Texture,我在屏幕外渲染了一个图像数据。

我使用 PBO 更快地读回数据,以便在 CPU 中进行进一步处理。

代码是:

但是我没有通过使用 PBO 获得任何性能提升,而且 glMapBufferRange() 返回 NULL。

在这里处理 PBO 有什么问题?

0 投票
1 回答
36 浏览

c++ - 使用 PBO 从 SFML 纹理中读取像素

我在 SFML 中创建渲染纹理(sf::RenderTexture用于离屏渲染),绘制到它并尝试使用 PBO 异步读取像素。这是我正在做的一个最小的例子:

我没有从glGetError(). 但是我从来没有进入条件,即。像素数组始终为空。我无法弄清楚代码有什么问题以及为什么我没有从纹理中获取像素,我是否在某处错过了绑定?