Хранение пикселей RGBA32 непосредственно в текстуру OpenGL ES - PullRequest
3 голосов
/ 09 декабря 2011

Я использую библиотеку, которая предоставляет мне фреймы, которые я должен перетаскивать на экран. Я выделяю буфер, и эта библиотека пишет прямо в этот буфер. Когда мне нужно, я должен перетаскивать указанную часть этого буфера на экран. Я рендеринг с использованием Qt с движком рисования OpenGL / ES.

Вопрос в том, какой самый быстрый способ подняться на экран? В настоящее время я загружаю буфер в QImage, используя конструктор, который принимает указатель на данные. Это должно избежать любой копии. Затем я использую метод drawImage в QPainter, чтобы перетащить на экран правильную область. Я предполагаю, что этот метод загружает копию области в память графического процессора и затем перетаскивает на экран, используя текстуру OpenGL.

Можно ли избежать этой копии, чтобы ускорить процесс? Можно ли, например, рисовать непосредственно в текстуре OpenGL, чтобы мне не пришлось переходить на GPU? Я читаю объекты буфера пикселей. Может ли это быть решением? Могу ли я использовать для этой цели объект QGLFramebufferObject?

1 Ответ

1 голос
/ 09 декабря 2011

В конечном итоге вам нужно записать в графический процессор, все, что вы можете сделать, это минимизировать количество ненужных копий и любые преобразования в процессоре, скажем, из RGBA в BGRA.

Я бы начал с QImage и QPainter и посмотрел бы, является ли графическая скорость ограничивающим шагом, перед тем как начать optomise.

Взгляните на эту ссылку .

Обратите внимание, что многие общие рекомендации OpenGL НЕ применимы к opengl-ES, лучше всего рассматривать ES как совершенно отдельную концепцию для openGL.

...