[cairo] performance difference between image and win32 surface?
Vladimir Vukicevic
vladimir at pobox.com
Fri Oct 19 12:40:31 PDT 2007
Danilo Gulamhussene wrote:
> Vladimir Vukicevic schrieb:
>> Could you give some examples of the kinds of operations that you're
>> finding slower?
>>
>> - Vlad
> [...]
> Owens advise to use cairo_push_group() on win32 surface fixed the
> performance difference for this test completely.
>
> The costs of cairo_push_group(), which implicitly creates a new surface
> (as far as I understood), on what do they depend? Do they depend on the
> size of the original surface, the current clip region, or the space used
> by the objects, i draw inside the group?
Ah, yeah, if you're drawing straight to a window's DC, you're paying a
lot of overhead because that window is being immediately updated.
Drawing to an offscreen DC, which is effectively what push_group will do
for you, is much faster.
The size of the temporary surface created by push_group is the
intersection of the current clip region and the bounds of the original
surface. It's independent of the size of any drawing you do afterwards.
For maximum speed, I would suggest using push_group with a COLOR-only
content (not COLOR_ALPHA), and using OPERATOR_SOURCE to update the
resulting window. This should result in a fast BitBlt for the final
update to the screen.
- Vlad
More information about the cairo
mailing list