0

现在,我可以通过使用 glReadPixels() 来读取帧缓冲区 (FBO) 中的数据来保存纹理。但是,我遇到了两个问题。

(1)为了保持保存的图像质量,尺寸会大于GL_MAX_TEXTURE_SIZE(大多数设备是4096)。如果我创建了大纹理(例如:4160x3120),则在调用 glCheckFramebufferStatus() 时出现 GL_FRAMEBUFFER_UNSUPPORTED 错误...。

(2) 如果我创建了小纹理(例如:3648x2736),除了 glReadPixels() 之外的一切都会很慢......

所以回到我的问题,是否有可能克服最大纹理大小限制并有效地保存它?谢谢。

4

1 回答 1

0

1)不,除非您想以某种方式将图像处理成多个较小的部分,否则这是不可能的。我不记得见过比这更大的 GL_MAX_TEXTURE_SIZE 的设备,所以你将无法创建比这更大的 FBO。

编辑:实际上,有很多设备的最大纹理大小为 2048,尽管 4096 在最近的设备中是典型的。

2)你应该明白这已经是一个非常大的纹理,而不是一个小纹理,所以 glReadPixels() 会很慢。我不确定Android上有没有办法解决这个问题。

于 2013-09-06T05:02:15.207 回答