Как оптимизировать комбинированные графические операции? - PullRequest
0 голосов
/ 28 апреля 2010

Вот сценарий, серия операций, которые я буду называть для рисования,

QPainter p (this);

1). p.fillRect (0,0,320,240, RED_COLOR)

2) p.drawLine (0,0,100,100, BLUE_COLOR)

3) p.fillRect (0,0,320,240, YELLOW_COLOR)

Теперь я хочу, чтобы художник не рисовал первую функцию FillRect. Он не должен рисовать линии. Он должен выполнять только последнюю операцию.

Есть ли способ добиться этой оптимизации в Qt.

Поддерживается ли этот тип оптимизации рисования / рисования какой-либо библиотекой?

Ответы [ 3 ]

2 голосов
/ 28 апреля 2010

Короче, нет. Однако закадровый рендеринг, как правило, быстрый, и Qt создает двойные буферы для вас. Рисование в QImage или QPixmap также можно выполнять в потоках без GUI, так что вы можете выполнять многопоточность рисования. QPixmaps также имеют преимущество QPixmapCache .

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


Однако вам следует профилировать этот раздел кода, чтобы увидеть, действительно ли он что-то получает. Преждевременная микрооптимизация часто приводит к напрасным усилиям.

Я бы начал с рендеринга за пределами экрана (если возможно, многопоточным), если это действительно слишком медленно, попробуйте другие шаги. Однако в большинстве случаев стандартные методы рисования будут достаточно быстрыми.

1 голос
/ 29 апреля 2010

Если вы ищете оптимизацию рендеринга списка отображения, в частности, тест окклюзии в вашем примере, то я не думаю, что сам Qt предоставляет такую ​​функцию.

Возможно, вы захотите узнать, есть ли у OpenGL такая возможность. Если так, то, возможно, рисование в QGLWidget получит то, что вы хотите?

1 голос
/ 28 апреля 2010

Вы всегда можете нарисовать вашу сложную сцену в QPixmap, а затем только растянуть эту растровую карту, когда происходит рисование. Конечно, его необходимо обновлять при изменении сцены (например, при ее изменении, изменении состояния в ней и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...