【问题标题】:How to Get Around GL_MAX_TEXTURE_SIZE for Image Processing如何绕过 GL_MAX_TEXTURE_SIZE 进行图像处理
【发布时间】:2012-10-09 06:10:50
【问题描述】:

我正在开发一个依赖于 OpenGL ES 2.0 的图像处理程序,因此它可以部署在大量设备上。在很多情况下,人们会使用小图像,这不会绕过纹理限制,但是对于每个方向都有数千像素的大图像,它可能无法在多个设备上渲染。

我的第一个想法是将图像分割成更小的方块并单独渲染每个方块,这适用于简单的程序,但对于需要基于相邻像素值进行渲染的任务,例如卷积或扭曲效果,这不会足够了。

Photoshop 如何通过在其应用程序中为许多效果添加 OpenGL 支持来保持其 300,000 x 300,000 维度的能力?

对大于 GL_MAX_TEXTURE_SIZE 的图像执行后处理任务的最有效方法是什么?

在发送图像进行处理之前,仅渲染到可视区域并重新缩放图像以进行缩放?但这需要我重新处理图像以进行简单的放大/缩小和平移图像。我看到这种方法的唯一问题是无法将图像导出为完整质量的图像,因此这种方法在用户尝试保存他们的工作之前效果很好。

【问题讨论】:

  • 对于涉及卷积的平铺,您可以在平铺边缘周围添加一个缓冲区,以便在这些边缘附近仍对正确的像素进行采样。缓冲区增加了一点处理和内存开销,并且它们不允许任意采样距离(在远程扭曲操作中最明显),但是可以使用短程卷积和高斯模糊之类的东西来工作这个。

标签: opengl-es glsl post-processing


【解决方案1】:

问题是opengl是用于实时渲染而不适合图像处理,最好的选择是使用CPU程序及其所有优点(C/C++,线程,无纹理限制,..)只考虑opengl在“帮助”CPU(如 NVIDIA CUDA)的情况下。

【讨论】:

  • 嗯,因为他谈到了 ES 设备、OpenGL 和良好的旧 GPGPU 片段着色器方法(在 CUDA 之前每个人都这样做)仍然是 GPU 加速图像处理的最佳选择。事实上,这种方法非常适合简单的图像处理任务(尽管同步和反馈对于更复杂的任务可能会变得困难)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
相关资源
最近更新 更多