【问题标题】:Is it possible to get pixels from OpenGL buffer at the original size?是否可以从原始大小的 OpenGL 缓冲区获取像素?
【发布时间】:2020-06-27 19:09:21
【问题描述】:

我有一个使用 OpenGL 的 4K 项目。所以我所有的图像都是基于 4K 的,它可以在我的全屏 1080p 计算机上渲染。 OpenGL 只是很好地调整大小而没有问题。但我想使用 glReadPixels() 之类的东西从 4K 源读取缓冲区。到目前为止,我无法弄清楚这是否可能。不确定 GPU 帧缓冲区在调整大小时会发生什么,我猜它只是将缓冲区调整为 1080p,从而无法获取原始的 4k 内容?如果是这种情况,我会做其他事情,但在我冒险编写一些额外的代码之前必须先问清楚。 ;-) 谢谢。

【问题讨论】:

  • 我可以做的一件事是使用 glReadPixels 并且只是放大整个图像的缩小比例,而不是在窗口为 4K 时重新缩放。只需要为此正确计算即可。但如果可能的话,我真的希望我能获取原始的 4K 缓冲区。
  • 也许我将不得不采取不同的方法。我需要这个,这样我就可以在在其上绘制一些东西之前获取背景。例如,像旋钮一样。所以也许我必须想出我自己的具有 4K 背景的缓冲层。我会想办法的,我猜。如果以上都做不到。

标签: c++ opengl


【解决方案1】:

使用framebuffer object 以您喜欢的分辨率渲染场景并从那里读回数据。如果您仍然想要窗口中的“实时预览”,只需将 FBO 内容blit 到您的默认帧缓冲区(并在该步骤中缩小它们)。

【讨论】:

  • 谢谢,这确实有效,但我试图避免再次重绘整个屏幕。我可以只重绘需要重绘的皮肤部分,但这将是一些工作。我会想办法的。最好的选择仍然是使用 glReadPixels 并将大小调整为正确的大小。无论如何,这只会在您打开菜单或模式窗口时发生。 ;-)
  • “但我试图避免再次重绘整个屏幕”不确定你的意思,但这种方法带来的唯一开销是额外的 blit,这不会花费很多
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多