问题标签 [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.
android - Android OpenGL ES 3.0 PBO 而不是 glReadPixels()
我想glReadPixels()
使用 PBO(对于 GLES 3 设备)提高性能,但在这段代码中遇到了问题:
目前它失败的glReadPixels()
方法。我找到了 this & this,但我无法发送零,因为它需要一个 IntBuffer 参数。我将非常感谢有关该问题的任何建议
更新:似乎不可能只为该任务使用 Java API。所以我使用 ndk 添加了一个glReadPixels()
使用正确的最后一个参数(int offset)调用的函数现在我的 GL 调用都不会产生错误。
那是我的 jni c 代码:
现在的问题是glReadPixels()
调用比没有 PBO 需要更多的时间,所以还没有性能提升。我将探索为什么会发生这种情况并在我发现某些内容时进行更新。
更新 2 我之前忘了更新它,但实际上问题是我使用的是 pbuffer 表面,这就是我没有性能提升的原因。我比较了这个选项和不使用 pbuffer 表面的选项,性能提升是巨大的。
因此,如果在屏幕外渲染并使用 glReadPixels ,则值得使用 pbuffer 表面
c++ - 有效地将子图像从主机复制到opengl像素缓冲区对象
我目前正在将数据从 CPU 主机移动到 OpenGL 内存,并且我正在使用像素缓冲区对象来执行此操作。我可以像这样复制整个图像:
这实际上相当快。但是,现在我需要复制数据的矩形子图像。因此,从本质上讲,我需要执行多个 memcpy 来执行此操作,这可能会影响性能,因为我必须逐行复制内容。我想知道是否有更快的方法来执行此操作。
c++ - 使用 CUDA、SFML 和 OpenGL:纹理拒绝出现在 Quad
使用各种在线教程/示例/文档/论坛,我输入了代码以允许 CUDA 操作 OpenGL 纹理,以便可以将其输出到屏幕上。我的显示方法是使用 PBO 和 uchar4 数组的分配纹理图像。尽管我尝试解决这个问题,但纹理不会出现在 2D 表面上。我似乎无法确定问题所在。
这些是我迄今为止检查/完成的所有事情:我已经创建了一个 PBO 并将其注册到 CUDA,称为 cudaGraphicsResourceGetMappedPointer 和在 GPU 函数调用之前和之后的取消映射等效项,确保为 2D_TEXTURE 调用 glEnable,为调用 glDisable任何不必要的值,不需要时未绑定的纹理/缓冲区。我还重置了 SFML OpenGL 状态,以防 SFML 是原因。还使用了方形纹理。我的 OpenGL 版本和 CUDA 版本适用于我使用的所有函数调用。
当我检查 cudaErrors 和 OpenGL 错误时,程序中似乎没有任何错误。
我不确定这是否与它有关,但是当我打电话时:
我的四边形似乎没有显示。
我主要是从这个网站上找到灵感的。非常感谢!
这是我的代码:
主文件
OpenGLTest.cuh
OpenGLTest.cu
一般类型
opengl - 片段着色器中使用调色板的 PBO 索引颜色纹理渲染不起作用
我正在开发一款带有 8 位图形的游戏。我为我的游戏循环提供了一个 Pixelbuffer (OSXRenderer.pbo) 来填充它。然后将其texsubimage 到纹理上(OSXRenderer.ScreenTexture)。纹理通过四边形渲染到屏幕上。
我让它在使用 RGB PBO(尺寸:宽度*高度*3)时没有问题。但现在我希望 pbo 被索引颜色。所以我将调色板加载到另一个纹理(OSXRenderer.PaletteTexture)中并更改了我的 PBO。(尺寸:宽*高)。
我认为它应该如何工作是:PBO 充满噪声(随机 uint8 0-63),Screentexture 被 texsubimaged,当通过四边形将其渲染到屏幕上时,我的 FragmentShader 用我调色板中的相应颜色替换所有 RED 通道值我在屏幕上得到 8 位噪音。
但我根本无法让它工作。我只会黑屏。如果我将我的 fragcolor 设置为传入的 screentexture(pbo) 数据,我会得到红噪声。正如预期的那样。
[编辑] 我测试了片段着色器“颜色”变量值。它们总是 0.0,除了 alpha 总是 1.0
设置:
更新循环:
顶点着色器:
碎片着色器:
qt - 具有压缩纹理的 QGLBuffer
我正在尝试将 QT 的 QGLBuffer 与 glCompressedTexImage2D() 和 glCompressedTexSubImage2D() 一起使用,但没有成功。
这是一段使用 QGLBuffer 和 glTexImage2D() 的工作代码:
这是另一段使用压缩图像数据的代码,也可以:
但是,如果我像这样使用带有 glCompressedTexImage2D() 的 PBO:
我得到一个无效的操作错误。QGLBuffer 的文档说它用于“将像素数据写入 GL 服务器(例如,使用 glTexImage2D())。”,但它没有提及其他解包命令,例如 glCompressedTexImage2D()。
我在网上搜索了有关 QGLBuffer 和 glCompressedTexImage2D() 的更多文档,但找不到同时使用它们的任何内容。
我正在使用 QT4.8 在 linux 下工作。
任何人都有成功做到这一点的经验吗?
php - 无法从表单获取数据到我的 mysql 数据库
我有问题让我的代码在 php 中工作我想将数据从 html 中的表单移动到我的 mysql 数据库,但它不起作用?
表格部分
php部分
与我的 mysql 数据库的连接工作我可以从数据库中获取数据,但不能输入到它。
感谢进阶。
这是我尝试过的许多解决方案中的一个!
opengl-es-3.0 - 为什么来自 PBO 的 glReadPixel GL_RGB 出现错误 0x502 INVALD OPTION
我看见
format 指定返回像素值的格式;可接受的值为:
GL_ALPHA GL_RGB GL_RGBA RGBA 颜色分量从颜色缓冲区中读取。每个颜色分量都转换为浮点数,这样零强度映射到 0.0,全强度映射到 1.0。
然后丢弃不需要的数据。例如,GL_ALPHA 丢弃了红色、绿色和蓝色分量,而 GL_RGB 只丢弃了 alpha 分量。GL_LUMINANCE 将单分量值计算为红色、绿色和蓝色分量的总和,GL_LUMINANCE_ALPHA 也是如此,同时将 alpha 作为第二个值。最终值被限制在 [0, 1] 范围内。”
在https://www.khronos.org/opengles/sdk/1.1/docs/man/glReadPixels.xml
如果使用 GL_RGBA 效果很好。但如果我改变
glReadPixelsPBOJNI(0, 0, 宽度, 高度, GLES30.GL_RGBA, GLES30.GL_UNSIGNED_BYTE, 0);
至
glReadPixelsPBOJNI(0, 0, 宽度, 高度, GLES30.GL_RGB, GLES30.GL_UNSIGNED_BYTE, 0);
0x502 得到。这有什么问题?
java - OpenGL:读取帧缓冲区的深度纹理
我在 Java 中使用 LWJGL,它具有与 C++ OpenGL 相同的函数名称。请注意,我被迫使用 OpenGL 的“旧”固定功能管道。
我目前正在使用以下代码成功地将 Framebuffer 的 RGB 内容绘制到 PixelBufferObjects:
我如何将深度图的内容(我想它被初始化为 depthBuffer)而不是“主”帧缓冲区内容存储在 PBO 中?
更新:这是我现在用来将深度图的内容读取到 PBO 的代码:
然而,生成的图像只是黑色的。什么可能导致这种情况?我可能搞砸了一些 GL 格式吗?
performance - glMapBufferRange() 很慢,映射数据的 memcpy() 在 Android 上也很慢
我设法编写了一个类似于 grafika 的 ContinuousCaptureActivity 的视频录制演示(ContinuousCaptureActivity.java 的源代码)。
不同的是,grafika 使用的是硬件编码,而我使用的是软件编码。对于软件编码,我使用 PBO 从 GPU 获取每个视频帧,速度非常快,并将图像数据复制到 ffmpeg,然后进行 h264 编码。
大多数设备的性能是可以接受的,glMapBufferRange() 用时不到5ms,memcpy() 用时不到10ms。
但是在华为mate7的手机上性能较低。glMapBufferRange() 耗时 15~30ms,memcpy() 耗时 25~35ms。
我在 mate7 上测试过正常的 memcpy(),复制正常内存时速度要快得多。
真的很奇怪,谁能帮帮我?
设备信息:
在此处查看详细信息:华为 mate 7
pbo代码如下:
opengl - GL_MAP_COHERENT_BIT 是如何工作的?
glBufferStorage有一个标志 GL_MAP_COHERENT_BIT,这个标志有如下描述:
对同时映射以供客户端访问并由服务器使用的缓冲区的共享访问将是一致的,只要该映射是使用 glMapBufferRange 执行的。也就是说,客户端或服务器写入存储的数据将立即对对方可见,而应用程序无需采取进一步的行动。尤其是,
如果您在映射范围内写入一个值,如何使其对对方可见?这是通过 DMA 控制器使用 DMA 传输吗?还是有其他机制?