问题标签 [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.
opengl - CUDA OPENGL 互操作性:慢映射
我的应用程序将从 openGL(深度图和渲染的 2D 图像信息)获取渲染结果到 CUDA 进行处理。
我做的一种方法是通过 glReadPixel(..., image_array_HOST/depth_array_Host)* 检索图像/深度图,然后通过 cudaMemcpy(..., cudaMemcpyHostToDevice) 将 image_HOST/depth_HOST 传递给 CUDA。我已经完成了这部分,虽然这听起来是多余的。(从 GPU>CPU>GPU)。*image_array_HOST/depth_array_Host 是我在主机上定义的数组。
另一种方法是使用 openGL<>cuda interpol。第一步是在 openGL 中创建一个缓冲区,然后将图像/深度信息传递给该像素缓冲区。还注册了一个 cuda 令牌并将其链接到该缓冲区。然后将 CUDA 上的矩阵链接到该 cuda 令牌。(据我所知,似乎没有直接的方法将像素缓冲区链接到 cuda 矩阵,应该有一个 cudatoken 供 openGL 识别。如果我错了,请纠正我。)
这部分我也做过。它认为这应该是相当有效的,因为 CUDA 正在处理的数据没有传输到任何地方,而只是传输到它在 openGL 上的位置。它是设备(GPU)内部的数据处理。
但是,我从第二种方法获得的花费时间甚至(略)长于第一种方法(GPU>CPU>GPU)。这真的让我很困惑。
我不确定我是否错过了任何部分,或者我没有以有效的方式做到这一点。
我也不确定的一件事是 glReadPixel(...,*data)。在我的理解中,如果 *data 是一个指向 HOST 上内存的指针,那么它将执行从 GPU>CPU 传输的数据。如果 *data=0,并且绑定了一个缓冲区,那么数据将被传输到该缓冲区,它应该是 GPU>GPU 的事情。
也许其他一些方法可以比 glReadPixel(..,0) 更有效地传递数据。
希望有人能解释我的问题。
以下是我的代码:
--
multithreading - 使用 PBO 和 VBO
我的应用程序(QT/OpenGL)需要以 25fps 的速度从 IP camaras 上传一堆视频,然后处理它应用:
- 对于每个视频,一个去马赛克滤镜、锐化滤镜、LUT 和失真文档。
- 然后我需要在opengl(纹理投影等)中进行渲染,选择之前处理的一个或多个帧
- 然后我需要将结果显示给一些小部件(QGLWidget)并读取像素以写入电影文件。
我试图了解 PBO 和 FBO 的优缺点,并描绘了以下架构,我想在您的帮助下进行验证:
- 我为每个视频创建一个线程,以在缓冲区(图像数组)中捕获。有一个视频缓冲区。
- 我创建了一个 Upload-filter-render 线程,其目的是:a)将帧上传到 GPU,b)将过滤器应用到 GPU,c)应用合成并渲染到纹理
- 我让 GUI 线程在我的小部件中呈现上一步中创建的纹理。
对于Upload-Frames-to-GPU过程,我想最好的方法是对每个视频使用 PBO(可能是两个 PBOS)来异步加载帧。
对于Apply-Filter-info-GPU,我想使用 FBO,这似乎是渲染到纹理的最佳选择。我会先绑定PBO上传的纹理,然后渲染到另一个纹理,过滤后的图像。我不确定只使用一个 FBO 并根据视频上传更改绑定纹理输入和绑定纹理目标,或者使用与要上传的视频一样多的 FBOS。
最后,为了将结果显示到小部件中,我使用了 FBO 渲染的最终纹理。为了写入电影文件,我使用 PBO 将像素从 GPU 异步复制回 CPU。
看起来正确吗?
c# - 在 OpenGL(包括 PBO)中使用纹理/精灵的最佳方式
我有一个 C# 小游戏,主要使用固定的精灵(从磁盘加载的位图)和一些视频。
现在我们目前的方法是
加载:
绘画
和更新:
所有纹理都保留到使用前,所以加载只在启动时完成一次(通常)所以首先:对该方法有什么评论吗?现在我想正确使用 PBO 来更新纹理(主要用于视频) A)使用 PBO 添加纹理(来自 bmp)是个好主意吗?我会创建一个 pbo,将数据从 bmp 复制到 pbo,然后使用 TexSubImage2D。是否有任何性能点或者开销是否很高?B)更新相同:当前代码:
这真的有效还是没有任何好处?
我阅读了http://www.opengl.org/wiki/Pixel_Buffer_Object和http://www.songho.ca/opengl/gl_pbo.html以及关于下载和使用的第一篇文章,如果我上传数据和立即绘制该纹理(甚至使用 TexSubImage2D?)然后我将无法通过 PBO 获得更多速度。这是正确的吗?因此,如果我使用 PBO,我是否必须使用第二个 PBO 并延迟一帧绘制帧?
我的主循环是这样的:
在另一个线程中进行视频解码。
是一种非常幼稚的方法,但有效。这样做的正确/更好的方法是什么?
opengl - glReadPixels 或 glCopyTexSubImage2D 太慢?
我需要绘制N遍,对于每遍,我从fbo读取一个像素,我发现每次读取一个像素太慢了。然后,我使用另一个纹理(rectange:N*1) 来缓存像素,这意味着对于每次传递,我将一个像素复制到结果纹理。N次通过后,我读取了一次结果纹理。但是,它也太慢了。例如,读取结果纹理 (200*1) 需要 13 毫秒。
我想知道是否有另一种方法可以解决这个问题。
我还解决了一些关于像素缓冲区对象的帖子,它以异步方式工作。但是,在最后一次通过后,我需要立即从结果纹理中得到结果。cpu 和 gpu 都没有其他工作。
opengl - 修改现有的 opengl 应用程序以呈现到 PBO(并从那里到文件)?
我想修改现有的 OpenGL 应用程序以渲染到 PBO,然后读取 PBO 以生成最初要渲染到屏幕的编码视频。由于性能是关键,我不能像以前那样通过从后台缓冲区执行 glReadPixels 来停止管道。我想知道是否有一种简单或直接的方法可以将渲染的所有内容重定向到帧缓冲区并使其转到 PBO。换句话说,我不在乎它是否没有显示在屏幕上。事实上,我宁愿屏幕上什么也不显示。
android - OpenGL ES 3.0 在 Android 中的 glReadPixels 性能提升
我找到了一些通过 OpenGL ES 3.0 加速 glReadPixels 的方法,但我不确定它是否有效。
- 将glReadPixels()的第五个参数指定为GL_BGRA以避免不必要的混乱。
- 如上所述使用PBO。_
为了验证,我更新到最新的Android SDK和ADT,并尝试使用OpenGL ES 3.0。但是,我找不到GL_BGRA
我预期的定义,也不知道如何使用glMapBuffer()
. 我错过了什么吗?
总结一下,
- 除了使用 glReadPixels() 之外,还有其他更快的方法来访问帧缓冲区吗?
- 如何在 Android 上通过 OpenGL ES 3.0 使用 GL_BGRA 和 PBO?
如果有人知道,请指出我。一些代码片段会更好。提前致谢。
opengl - OpenGL + PBO + FBO + 一些 ATI 卡 - 颜色和像素偏移
我们正在开发用于创建幻灯片的软件并使用 OpenGL。我们使用 FBO + PBO 将数据从 VGA 快速读取到 RAM,但在 ATI 的一些视频卡上,我们面临以下问题:
- 交换 RGB 分量
- 像素移位
如果我们不使用 PBO,就没有问题。我们还注意到 PBO/FBO (4:3) 的纵横比解决了像素偏移问题。
有什么想法或建议吗?
以下是更多详细信息:
- ATI Radeon HD 3650
PBO代码:
... PBO 将数据读回内存
FBO 初始化
opengl - OpenGL PBO 不适用于 nVidia 显卡
我正在尝试使用 openGL 渲染 RGB 帧。在 CPU 上分配内存时,代码可以正常工作。但是,当我使用像素缓冲区对象的概念在 GPU 上分配内存时,我在渲染帧时遇到了问题。
问题是,显示窗口完全是白色的。当相同的代码在其他显卡上运行时,代码可以正常工作。但是,当我在任何具有 nVidia 显卡的系统上运行它时,都会遇到这个白屏问题。
下面是我的代码:
我已经调试并检查了是否glMapBufferARB
返回地址,它返回一个有效地址,即BadPtr
那里没有问题。我检查了 3 个系统,有 3 个不同型号的 nVidia 显卡,输出是一样的,就是白屏。
但是,我也尝试了具有其他显卡的系统上的代码,该代码有效。此外,OpenGL版本没有问题。
建议一些更改或可以使上述代码工作的东西。
php - 这可以作为安全锁文件传递吗?
我制作了一个锁文件来查看人们是否在某些页面上登录,我很好奇它是否真的足够安全以进行直播,或者人们是否可以轻松绕过这个锁。
这是我目前的代码:
我觉得因为它检查数据库中的用户和密码匹配,所以实际上没有任何办法解决这个问题,但同时我对 PHP 有点陌生,并不真正知道。
c++ - 有没有人有 PBO + SDL2.0 + OpenGL 的例子
有没有人有 PBO(像素缓冲区对象)+ SDL2.0(简单 DirectMedia 层)+ OpenGL 的工作示例?
原因是使用 GLGetPixels 获得异步 GPU -> CPU 下载,从而获得性能提升。
这是我的尝试。use_pbo = false 或 true 根本没有测量差异。而且我之前在同一台机器上使用过带有 GLUT 的 PBO,所以我知道我的硬件支持它。
我看了很多http://www.songho.ca/opengl/gl_pbo.html教程,但没有看到我做错了什么。