<div dir="ltr">I'm not an expert either, but one thing I can think of, is if you keep track of your text extents, you could just clear that area each frame instead of the whole thing.  I'm sure there is an inflection point where that will be more time if you are drawing text to too many areas.<div><br></div><div>Another option that I could imagine is switching between 2 surfaces, if you are in an environment where you can run more than one thread, you could be clearing one surface while using the other, then switching back and forth.  So like double buffering, but to parallelize the operation.</div><div><br></div><div> </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 16, 2017 at 9:47 PM, mike e <span dir="ltr"><<a href="mailto:Toqoz@hotmail.com" target="_blank">Toqoz@hotmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div dir="ltr">
<div id="m_-3475812409707328573divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif" dir="ltr">
<p>Hello, I'm not that experienced with cairo.</p>
<p><br>
</p>
<p>Currently I have a program that draws a background, and then draws some text over that background.  The text moves around over the background.  The image is redrawn often (multiple times a second).</p>
<p><br>
</p>
<p>The background is generated through cairo, it is not an image or something like that.</p>
<p><br>
</p>
<p>What is the most efficient way to accomplish this?  I know that I could set the paint operator to source and redraw everything each frame, but it seems inefficient.</p>
<p>Is there a way to draw a layer, and then save that layer indefinitely (or have a layer dedicated to the text)?  So that then I could just clear just the text each time and draw it in a new location?</p>
<p><br>
</p>
<p>I'm using Xlib and drawing to an window through cairo_xlib_surface_create().</p>
<p><br>
</p>
<p>Heres what I'm basically trying to do:</p>
<p><br>
</p>
<p><span style="font-family:"Courier New",monospace">    if (firstrun) {</span></p>
<p><span style="font-family:"Courier New",monospace">        </span><span style="font-family:"Courier New",monospace">draw_background();</span></p>
<p><span style="font-family:"Courier New",monospace">    }</span></p>
<p><br>
</p>
<p><span style="font-family:"Courier New",monospace">    clear_text();</span></p>
<p><span style="font-family:"Courier New",monospace">    draw_text(new_location);</span></p>
<p><br>
</p>
</div>
</div>

<br>--<br>
cairo mailing list<br>
<a href="mailto:cairo@cairographics.org">cairo@cairographics.org</a><br>
<a href="https://lists.cairographics.org/mailman/listinfo/cairo" rel="noreferrer" target="_blank">https://lists.cairographics.<wbr>org/mailman/listinfo/cairo</a><br></blockquote></div><br></div>