- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 glReadPixels
在 GLSurfaceView.Renderer
的 drawFrame
方法中定期拍摄快照。我需要定期拍摄此快照,以根据我的应用程序要求继续保存我的数据。
但是 glReadPixels
性能确实很慢并且显示出延迟。以下是我如何使用该方法:
gl.glReadPixels(0, 0, 1280, 752, GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE, bb);
是否有替代方法来使用 glReadPixels
?如何在不造成延迟的情况下保存图像?
最佳答案
我不知道这在 Android 上是否可用,但也许 PBO(像素缓冲区对象)会提高性能。看这个OpenGL.org thread .
但是,不要指望奇迹!对于 1280*752 RGBA 图像,每帧传输 3.67 MB 的数据。我不知道 Android 的数据,但我敢打赌你正面临内存带宽或硬盘写入瓶颈。如果您减小 readPixel 的大小并获得更好的性能,您就会知道这就是问题所在。
此外,您需要“A”组件吗?也许读回 RGB 更快。尝试以不同的格式回读。有些比其他的快方式,因为它们更好地映射到 OpenGL 内存表示。例如,BGRA 可能比 RGBA 更快。当您请求的格式与 OpenGL 的格式不匹配时,每个像素都必须在操作期间进行转换。
关于android - glReadPixels 使用太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8222548/
我有一个具有两个线程的 Android OpenGL-ES 应用程序。将线程 1 称为“显示线程”,它将其当前纹理与来自线程 2 的纹理“混合”,也就是“工作线程”。线程 2 执行屏幕外渲染(渲染到纹
我正在使用 pyopengl 获取深度图。 我可以使用 glReadPixels() 获得标准化的深度图。如何将归一化值恢复为世界坐标中的实际深度? 我试过使用 glDepthRange(),但它总是
比如在片段着色器中 FragColor = vec4(TexCoords, MicrifiedCurrentPixelLevel, 0.5); notes:A'value is 0.5. 我想获得Fr
当我绘制一个点时,glReadPixels 不会立即更新。 glColor3f(1.0f, 0.0f, 0.0f); glBegin(GL_POINTS); glVertex2f(x,
我想使用 JOGL 保存我正在用 openGL 显示的视频。为此,我按如下方式将我的帧写入图片,然后,一旦我保存了所有帧,我将使用 ffmpeg。我知道这不是最好的方法,但我仍然不太清楚如何使用 te
我正在尝试使用 glReadPixels 从像素中获取数据。它工作了一段时间。但现在它停止工作了,我不知道为什么。 我需要制作Flood fill算法。 glBegin(GL_POINTS);
我正在使用代码渲染圆形渐变并通过触摸在渐变上创建十字准线( subview )。我现在想读取触摸位置的像素并让它返回 RGB 值,但它总是给我相同的值.. 编辑:添加了呈现渐变的代码 全新代码: vi
我尝试获取渲染像素的颜色。 gl.glColor3f(1f, 0, 0); //draw gl.glReadPixels(lastX - pw / 2, MyCanvas.this.getHeight
我就开门见山了:) 从上面的 480 x 320 图中,我想我可以像蠕虫游戏一样检测像素级别的碰撞。 我想知道的是如何对不同图层上的像素进行采样。正如您在图中看到的,当蠕虫下落时,我只想使用 glRe
经过一个多小时的寻找答案(尝试 Munshi 的“OpenGL ES 2.0 编程指南”中的内容、搜索 Apple 的文档、搜索 StackOverflow),我仍然对如何让 glReadPixels
当我将我的场景渲染到屏幕上时,场景使用了 _MultiSampling Anti-Aliasing 8x; 没问题。 但我想通过 glReadPixels() 读取像素缓冲区,我有一个带有别名线的别名
我正在尝试读取屏幕上绘制的矩形的颜色,但是当我尝试从坐标读取时,它似乎是从一个偏移量读取的,但这个偏移量并不一致。 (我正在使用 SDL2 库以防有帮助)我发现它正在反转坐标,例如如果 y 为 0,则
我使用 JOGL 来处理 OpenGL,但无法获取像素颜色。方法 glReadPixels() 始终返回一个全零的数组。 这就是我的使用方式: private static GL2 gl; stati
我正在尝试通过使用带有 C++ 代码的 glReadPixels 选择两个点(对角)来读取一个像素矩形。选择 Y 轴值时出现问题。 目前,我设法让 glReadPixels 工作直到缩放。当您放大(放
我遇到了 glReadPixels 无法读取颜色附件的问题。 我正在尝试做的事情: 读取非默认帧缓冲区的第三种颜色附件(下面的代码) glFlush(); glFinish(); //binds my
我有一个可以在显示器上渲染的 3d 场景。但是,除了渲染它以显示之外,我还希望能够将渲染的场景导出为图像(比如每 100 帧一次)(比如 JPG 或 PNG 图像),也许将其保存为文件保存在我的某个地
目前我的视口(viewport)上是: 这是我导出图片的方法。 void exportImage() { int width = 200; int height = 100; GLubyt
下面的代码工作正常 const char *title = "glReadOutput"; Mat out1, out2; out1.create(screenHeight,screenWidth,
我是 OpenGL 和 C++ 的新手,最近一直在尝试从我渲染的窗口中提取深度值。我注意到了一些有趣的事情,但我似乎无法弄清楚为什么会这样。 如果我使用与我的窗口大小匹配的“宽度”和“高度”值调用 g
我正在使用 glReadPixels 在 GLSurfaceView.Renderer 的 drawFrame 方法中定期拍摄快照。我需要定期拍摄此快照,以根据我的应用程序要求继续保存我的数据。 但是
我是一名优秀的程序员,十分优秀!