Изменение размера изображения с использованием OpenGL - PullRequest
3 голосов
/ 24 февраля 2011

Я хотел бы изменить размер изображения, используя OpenGL. Я бы предпочел это в Java, но C ++ тоже подойдет.

Я действительно новичок во всем этом, поэтому вот процесс в словах, как я его вижу:

  1. загрузить изображение как текстуру в OGL
  2. установить некоторые параметры, касающиеся состояния и фильтрации
  3. нарисуйте текстуру другого размера на другую текстуру
  4. получить данные текстуры в массив или что-то еще

Как вы думаете, будет ли быстрее использовать OpenGL и GPU, чем библиотеку BLIT на базе процессора?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 24 февраля 2011

Вместо рендеринга четырехугольника в FBO назначения, вы можете просто использовать аппаратную функциональность блитов: glBlitFramebuffer.Его аргументы просты, но требуют тщательной подготовки ваших FBO источника и получателя:

  • убедитесь, что FBO завершены (glCheckFramebufferStatus)
  • установите цель чтения FBO и запишите FBOцель независимо (glBindFramebuffer)
  • установка буферов рисования и буферов чтения (glDraw/ReadBuffers)
  • вызов glBlitFramebuffer, установка фильтра GL_LINEAR в аргументе

Бьюсь об заклад, это будет намного быстрее на GPU, особенно для больших изображений.

1 голос
/ 24 февраля 2011

Зависит, если изображения большие, возможно, будет быстрее, используя OpenGL.Но если он просто выполняет процесс изменения размера и больше не обрабатывает на стороне графического процессора, то это того не стоит, поскольку весьма вероятно, что он будет работать медленнее, чем процессор.

Но если вам нужно изменить размер изображенияи вы можете реализовать дальнейшую обработку в OpenGL, тогда это достойная идея.

...