Opengl 在GPU内存上运行的等效像素数?

Opengl 在GPU内存上运行的等效像素数?,opengl,gldrawpixels,Opengl,Gldrawpixels,有没有这样的功能,除了访问CPU内存之外,它还访问GPU内存?[帧缓冲区对象的纹理]如果它位于纹理中: 设置正交平截头体 禁用混合、深度测试等 绑定纹理 使用正确的纹理坐标绘制与屏幕对齐的纹理四边形 例如,我在GLDRAW中使用它,像素可以从缓冲区对象读取。就做一个 glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const ovid *pixels); 在调用glDrawPixels之前 警告

有没有这样的功能,除了访问CPU内存之外,它还访问GPU内存?[帧缓冲区对象的纹理]

如果它位于纹理中:

  • 设置正交平截头体
  • 禁用混合、深度测试等
  • 绑定纹理
  • 使用正确的纹理坐标绘制与屏幕对齐的纹理四边形

例如,我在

GLDRAW中使用它,像素可以从缓冲区对象读取。就做一个

glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const ovid *pixels);
在调用glDrawPixels之前


警告:不推荐使用glDrawPixels…

使用对frambuffer对象()操作的glBlitFramebuffer。Ans这不是不推荐的


您可以利用格式转换缩放多采样

让我们在这里介绍所有基础

首先,直接回答:是的,有这样一个功能。它被称为
glDrawPixels
。我不是开玩笑

glDrawPixels
当然可以从GPU内存中读取,前提是(通常称为“像素缓冲区对象”)
glDrawPixels
可以使用像素缓冲区对象作为像素数据的源。缓冲区对象(至少理论上)在GPU内存中,因此它们符合条件

但是,您可以在此基础上添加“帧缓冲区对象的纹理”。在此限定条件下,您会问:“有没有办法将像素数据从一个纹理/帧缓冲区复制到当前帧缓冲区?”

对。我能做到。它从
GL\u READ\u FRAMEBUFFER
快速切换到
GL\u DRAW\u FRAMEBUFFER
。而且,由于可以将纹理中的图像添加到FBO中,因此可以很好地复制图像。甚至可以从默认帧缓冲区复制到某些渲染缓冲区或纹理


您还可以使用,它将像素矩形从一个图像复制到另一个图像。如果您所做的只是复制像素数据,那么它比glBlitFramebuffer方便得多。目前这是一个全新的概念(GL 4.3,或)。它不能用于将数据复制到默认帧缓冲区。

设置纹理并绘制矩形?@Bahbar什么是不推荐使用的解决方案?
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, XXX)