For brushes with the size &gt;= 64, bitBlt&#39;ing at the data manager level could help as color spaces coincide. This feature is in my todo list, but i have much university work atm.<br><br><div class="gmail_quote">On Thu, Mar 11, 2010 at 7:00 PM, <a href="mailto:LukasT.dev@gmail.com">LukasT.dev@gmail.com</a> <span dir="ltr">&lt;&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hello,<br>
<br>
I&#39;m working on optimizing the smudge.<br>
<br>
In smudge we have these buffers:<br>
dab (the brush)<br>
device (we copy pixels from the actual layer)<br>
m_srcdev (we decrease opacity here but we first copy pixels from layer there)<br>
dabAsSelection - copy of dab so that bitBlt works with selection saved in fixed<br>
m_target - KisPaintDevice which will be bitBlt on layer<br>
<br>
Cyrille proposed to remove the dabAsSelection, because in valgrind it showed<br>
some performance problems.<br>
<br>
So I created KisFixedPainter so that I can composite KisPaintDevice on<br>
KisFixedDevice. This is needed when coping pixels from device to m_srcdev.<br>
Because I wanted to have m_srcdev as fixed device.<br>
<br>
I also made this method<br>
void KisPainter::bltFixed(qint32 dx, qint32 dy,<br>
                          const KisFixedPaintDeviceSP srcDev,<br>
                          const KisFixedPaintDeviceSP selection,<br>
                          qint32 sx, qint32 sy,<br>
                          qint32 sw, qint32 sh)<br>
<br>
so that we can bitBlt with fixed device as selection. This way we don&#39;t<br>
have to copy fixed device into KisSelection so that we can bitBlt with<br>
selection saved in fixed device on KisPaintDevice.<br>
<br>
Problem is that m_srcdev has to be KisPaintDevice in the end. It has to grow<br>
according pressure.<br>
<br>
You can resize fixed device but you invalidate the data and you actually need<br>
them for next iteration. I also tried to allocate double size of the buffer<br>
because I supposed that the device would grow maximally twice. But that is not<br>
good assumption because with e.g. dyna tool the paint device starts with size<br>
1 and grows to 10, so 10 times in that case. You can&#39;t guess maximum scale<br>
size, it is dynamic so we need to use KisPaintDevice anyway for m_srcdev.<br>
<br>
Now I can&#39;t use KisPainter::bltFixed as the m_srcdev is not fixed anymore.<br>
The solution would be to code bitBlt with KisFixedDevice as selection.<br>
<br>
BitBlt on KisPaintDevice with source KisPaintDevice and selection<br>
KisFixedDevice is quite crazy to code. Let&#39;s take a look at bitBlt function<br>
and you will get the idea.<br>
<br>
So what do you suggest to do ?<br>
Should I start to code bitBlt with fixed selection or have you got better idea?<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
Here is the patch<br>
<a href="http://lukast.mediablog.sk/patches/smudgeop.patch" target="_blank">http://lukast.mediablog.sk/patches/smudgeop.patch</a><br>
_______________________________________________<br>
kimageshop mailing list<br>
<a href="mailto:kimageshop@kde.org">kimageshop@kde.org</a><br>
<a href="https://mail.kde.org/mailman/listinfo/kimageshop" target="_blank">https://mail.kde.org/mailman/listinfo/kimageshop</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>Dmitry Kazakov<br>