<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Hi Chris,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Well just trying to get something simple to work first so let’s just continue with what I was attempting with that code I posted before.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">There will be a periodic chunk of data that comes in.  This data will be programmically used to generate a bitmap or bitmap array in memory.  Goal is to not use
 tmp files or files at all.  Take the image generated and geospatially place it onto a layer in osgEarth.  There will be a shader applied to the image to alter the information to show a type of animation, this can be ignored for now as I don’t have an issue
 doing this.  Every so often an update with different data will come in and a new image will be created and it will replace the one currently displayed on the layer in osgEarth.  This could happen quite a few times but the updates will not need to be fast,
 only ever 15-30 min but I been doing updates in seconds for testing.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">That’s the process of what I am doing, in my code I gave I replaced the image with just a yellow filled bitmap, and removed the bitmap creation and reading completely
 and just used the color yellow.  To mimic the change of new data I ramped the alpha channel data up and attempting to update the layer information with the new image with ramped up alpha channel.<a name="_MailEndCompose">  Ofc this is just for testing the
 data we will actually be processing will build complex figures onto the image with specific colors so the shader can process and do it’s work accordingly.  Goal of the shader is to take processing out of the osg processing loop to cause simplistic and repeated
 animations.<o:p></o:p></a></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Things I have tried before:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Building a TileSourceDriver this seemed to work except it would leave LOD artifacts of old data on some tiles after the image updates and I would have to manually
 pan the earth, zoom in and out until some buffer cleared before going back so it would cause a total refresh of all data.  I could never find a method that would trigger a GL refresh of every tile at ever LOD correctly,  the layer data seemed to be correct
 but the GL buffer data could not be forced for some reason.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Another method I tried was build a driver based off the VisibleLayer and use the OGRFeatureSource to put my image data onto a layer.  I could never get my image
 to show unless I made it a texture which would be fine but when I changed the data for the texture I could not find a way to update the layer to redraw.  I just can’t wrap my head around what callbacks to use or which update calls to use.  I abandoned this
 idea when I read I could apply shaders to my images directly without applying my image as a texture.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">And here we are with my code I supplied.  I have gotten the data to update shaders to work everything works with this method however cludgy it is, but again could
 only get the update to happen if I removed and added layers instead of trying to update the layer via some callback or call I am missing.  Ofc this is not working as my code and osg seem to conflict each other and I get an error on layer removal or addition,
 I have tried mutex’ing my operation loop but might be using that wrong as well.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">I was going to go back and try my layer removal and adding idea onto the OGRFeature work using textures but figured would be waste of time being it seems the
 layer removal and adding is causing the issue.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">I hope this give a good in-depth background of my efforts an what I am trying to accomplish and look forward to any suggestions you can provide to steer me in
 the right direction.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Thanks again in advance.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Shannon<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> osg-users [mailto:osg-users-bounces@lists.openscenegraph.org]
<b>On Behalf Of </b>Chris Hanson<br>
<b>Sent:</b> Wednesday, September 18, 2019 6:40 PM<br>
<b>To:</b> OpenSceneGraph Users <osg-users@lists.openscenegraph.org><br>
<b>Subject:</b> Re: [osg-users] questions about developing drivers for osg/osgEarth<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Could you explain your actual goal with specifics? It's hard to recommend a method that will be successful when we don't know what success even looks like.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">If you give is some detailed info we can probably recommend something specific.<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Wed, Sep 18, 2019 at 3:41 PM <a href="mailto:speterson@idealaero.com">
speterson@idealaero.com</a> <<a href="mailto:speterson@idealaero.com">speterson@idealaero.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Hi Chis,</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Any examples on how to do this?  I tried that so many ways and gave up.  I could never get anything
 to update at all.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">I have been having a hard time finding any examples on how to do this, so any help would be great.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Thanks</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><a name="m_-672716914191491768__MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> </span></a><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> osg-users [mailto:<a href="mailto:osg-users-bounces@lists.openscenegraph.org" target="_blank">osg-users-bounces@lists.openscenegraph.org</a>]
<b>On Behalf Of </b>Chris Hanson<br>
<b>Sent:</b> Wednesday, September 18, 2019 4:35 PM<br>
<b>To:</b> OpenSceneGraph Users <<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a>><br>
<b>Subject:</b> Re: [osg-users] questions about developing drivers for osg/osgEarth</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">You kind of seem to be going about this a difficult way. <o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Is dynamically altering a surface texture layer really the best way to add an arrow to the scene?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">It seems like you're trying to use a screwdriver to hammer nails.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Is it not more effective to use some kind of symbology and render passes to overlay it onto the surface without testing or rewriting the Z buffer?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">On Wed, Sep 18, 2019 at 2:57 PM
<a href="mailto:speterson@idealaero.com" target="_blank">speterson@idealaero.com</a> <<a href="mailto:speterson@idealaero.com" target="_blank">speterson@idealaero.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">Hello again,</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">I have gotten
<a name="m_-672716914191491768_m_-187406158781350">some of the things I want done somewhat working.</a></span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">I am now having an issue attempting to get a layer to update within a system thread I made.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">First off I built all this using the Simple Ocean plugin code as my base line.  I then added a way to get a simple yellow box to show where I wanted
 programically with osgEarth.  I do have shader code working but what I need help with now is updating my layer ever so often with new data for my shaders to run on.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">Below is my simple function that my thread runs,  layer is a valid layer that is displayed named “newlayer”. 
</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">The code runs and ramps up the alpha channel for a while (sometimes few seconds, sometimes minutes) and starts the ramp again with almost transparent,
 but eventually I get a read access violation in osg/NodeVisitor.cpp line 107.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">Can anyone look and hint to what might be causing this issue?</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">It is almost as if my code and osg code are conflicting with some pointer somewhere and I am not sure how to mutex my code correctly.  Maybe it is my
 thread?  I am using a std::thread to run this function on.  Am I updating my layer wrong completely by removing and adding a new one?</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">Thanks in advance.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:blue">void</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">mysimpleocean</span><span style="font-size:8.0pt;font-family:Consolas;color:black">::mylayer_redraw(osg::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">ref_ptr</span><span style="font-size:8.0pt;font-family:Consolas;color:black"><osgEarth::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">ImageLayer</span><span style="font-size:8.0pt;font-family:Consolas;color:black">>
</span><span style="font-size:8.0pt;font-family:Consolas;color:gray">layer</span><span style="font-size:8.0pt;font-family:Consolas;color:black">) {</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">int</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> width = 200;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">int</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> height = 200;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">double</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> wlon = -104.00;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">double</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> nlat = 49.00;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">double</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> elon = -96.00;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">double</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> slat = 45.00;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">int</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> target_height = 200;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">int</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> target_width = 200;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">double</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> geoTransform[6];</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    geoTransform[0] = wlon;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    geoTransform[1] = (elon - wlon) / width;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    geoTransform[2] = 0.00;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    geoTransform[3] = nlat;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    geoTransform[4] = 0.00;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    geoTransform[5] = (slat - nlat) / height;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    GDALAllRegister();</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">GDALDataset</span><span style="font-size:8.0pt;font-family:Consolas;color:black">* nmemDS;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    osgEarth::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">SpatialReference</span><span style="font-size:8.0pt;font-family:Consolas;color:black">*
 srs = </span><span style="font-size:8.0pt;font-family:Consolas;color:blue">const_cast</span><span style="font-size:8.0pt;font-family:Consolas;color:black"><osgEarth::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">SpatialReference</span><span style="font-size:8.0pt;font-family:Consolas;color:black">*>(_map->getProfile()->getSRS());</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">GDALRasterBand</span><span style="font-size:8.0pt;font-family:Consolas;color:black">* bandRed;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">GDALRasterBand</span><span style="font-size:8.0pt;font-family:Consolas;color:black">* bandGreen;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">GDALRasterBand</span><span style="font-size:8.0pt;font-family:Consolas;color:black">* bandBlue;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">GDALRasterBand</span><span style="font-size:8.0pt;font-family:Consolas;color:black">* bandAlpha;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    osgEarth::Drivers::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">GDALOptions</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
 gdaloptions;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    osg::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">ref_ptr</span><span style="font-size:8.0pt;font-family:Consolas;color:black"><osgEarth::Drivers::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">GDALOptions</span><span style="font-size:8.0pt;font-family:Consolas;color:black">::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">ExternalDataset</span><span style="font-size:8.0pt;font-family:Consolas;color:black">>
 eds;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    Threading::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">Mutex</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
 _mutex;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    osg::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">ref_ptr</span><span style="font-size:8.0pt;font-family:Consolas;color:black"><osgEarth::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">ImageLayer</span><span style="font-size:8.0pt;font-family:Consolas;color:black">>
 tlayer;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> 
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">int</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> alpha = 143;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> 
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">while</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> (</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">true</span><span style="font-size:8.0pt;font-family:Consolas;color:black">)
 {</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    nmemDS = (</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">GDALDataset</span><span style="font-size:8.0pt;font-family:Consolas;color:black">*)GDALCreate(GDALGetDriverByName(</span><span style="font-size:8.0pt;font-family:Consolas;color:#A31515">"MEM"</span><span style="font-size:8.0pt;font-family:Consolas;color:black">),
</span><span style="font-size:8.0pt;font-family:Consolas;color:#A31515">""</span><span style="font-size:8.0pt;font-family:Consolas;color:black">, 200, 200, 0,
</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GDT_Byte</span><span style="font-size:8.0pt;font-family:Consolas;color:black">,
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">nullptr</span><span style="font-size:8.0pt;font-family:Consolas;color:black">);   
</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    GDALSetProjection(nmemDS, srs->getWKT().c_str());</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    GDALSetGeoTransform(nmemDS, geoTransform);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    nmemDS->AddBand(</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GDT_Byte</span><span style="font-size:8.0pt;font-family:Consolas;color:black">,
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">nullptr</span><span style="font-size:8.0pt;font-family:Consolas;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    nmemDS->AddBand(</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GDT_Byte</span><span style="font-size:8.0pt;font-family:Consolas;color:black">,
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">nullptr</span><span style="font-size:8.0pt;font-family:Consolas;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    nmemDS->AddBand(</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GDT_Byte</span><span style="font-size:8.0pt;font-family:Consolas;color:black">,
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">nullptr</span><span style="font-size:8.0pt;font-family:Consolas;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    nmemDS->AddBand(</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GDT_Byte</span><span style="font-size:8.0pt;font-family:Consolas;color:black">,
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">nullptr</span><span style="font-size:8.0pt;font-family:Consolas;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    bandRed = nmemDS->GetRasterBand(1);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    bandGreen = nmemDS->GetRasterBand(2);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    bandBlue = nmemDS->GetRasterBand(3);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    bandAlpha = nmemDS->GetRasterBand(4);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">BYTE</span><span style="font-size:8.0pt;font-family:Consolas;color:black">* rrowbuff =
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">new</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">BYTE</span><span style="font-size:8.0pt;font-family:Consolas;color:black">[width];</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">BYTE</span><span style="font-size:8.0pt;font-family:Consolas;color:black">* growbuff =
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">new</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">BYTE</span><span style="font-size:8.0pt;font-family:Consolas;color:black">[width];</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">BYTE</span><span style="font-size:8.0pt;font-family:Consolas;color:black">* browbuff =
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">new</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">BYTE</span><span style="font-size:8.0pt;font-family:Consolas;color:black">[width];</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">BYTE</span><span style="font-size:8.0pt;font-family:Consolas;color:black">* arowbuff =
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">new</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">BYTE</span><span style="font-size:8.0pt;font-family:Consolas;color:black">[width];</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">for</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> (</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">int</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
 y = 0; y < height; y++) {</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">     
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">for</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> (</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">int</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
 x = 0; x < width; x++) {</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">        rrowbuff[x] = (</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">BYTE</span><span style="font-size:8.0pt;font-family:Consolas;color:black">)255;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">        growbuff[x] = (</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">BYTE</span><span style="font-size:8.0pt;font-family:Consolas;color:black">)253;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">        browbuff[x] = (</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">BYTE</span><span style="font-size:8.0pt;font-family:Consolas;color:black">)143;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">        arowbuff[x] = (</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">BYTE</span><span style="font-size:8.0pt;font-family:Consolas;color:black">)alpha;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">      }</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">     
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">CPLErr</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> rerr = bandRed->RasterIO(</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GF_Write</span><span style="font-size:8.0pt;font-family:Consolas;color:black">,
 0, 0, target_width, target_height, rrowbuff, target_width * ((elon - wlon) / target_width), target_height * abs((slat - nlat) / target_height),
</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GDT_Byte</span><span style="font-size:8.0pt;font-family:Consolas;color:black">, 4, 0);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">     
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">CPLErr</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> gerr = bandGreen->RasterIO(</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GF_Write</span><span style="font-size:8.0pt;font-family:Consolas;color:black">,
 0, 0, target_width, target_height, growbuff, target_width * ((elon - wlon) / target_width), target_height * abs((slat - nlat) / target_height),
</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GDT_Byte</span><span style="font-size:8.0pt;font-family:Consolas;color:black">, 4, 0);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">     
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">CPLErr</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> berr = bandBlue->RasterIO(</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GF_Write</span><span style="font-size:8.0pt;font-family:Consolas;color:black">,
 0, 0, target_width, target_height, browbuff, target_width * ((elon - wlon) / target_width), target_height * abs((slat - nlat) / target_height),
</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GDT_Byte</span><span style="font-size:8.0pt;font-family:Consolas;color:black">, 4, 0);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">     
</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">CPLErr</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> aerr = bandAlpha->RasterIO(</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GF_Write</span><span style="font-size:8.0pt;font-family:Consolas;color:black">,
 0, 0, target_width, target_height, arowbuff, target_width * ((elon - wlon) / target_width), target_height * abs((slat - nlat) / target_height),
</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">GDT_Byte</span><span style="font-size:8.0pt;font-family:Consolas;color:black">, 4, 0);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    }</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    alpha = alpha + 10;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">if</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> (alpha > 255)</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">      alpha = alpha - 255;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    eds
</span><span style="font-size:8.0pt;font-family:Consolas;color:teal">=</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">new</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> osgEarth::Drivers::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">GDALOptions</span><span style="font-size:8.0pt;font-family:Consolas;color:black">::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">ExternalDataset</span><span style="font-size:8.0pt;font-family:Consolas;color:black">(nmemDS,
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">true</span><span style="font-size:8.0pt;font-family:Consolas;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    gdaloptions.externalDataset()
</span><span style="font-size:8.0pt;font-family:Consolas;color:teal">=</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> eds;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    tlayer
</span><span style="font-size:8.0pt;font-family:Consolas;color:teal">=</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">dynamic_cast</span><span style="font-size:8.0pt;font-family:Consolas;color:black"><osgEarth::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">ImageLayer</span><span style="font-size:8.0pt;font-family:Consolas;color:black">*>(_map->getLayerByName(</span><span style="font-size:8.0pt;font-family:Consolas;color:#A31515">"newlayer"</span><span style="font-size:8.0pt;font-family:Consolas;color:black">));</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    tlayer</span><span style="font-size:8.0pt;font-family:Consolas;color:teal">-></span><span style="font-size:8.0pt;font-family:Consolas;color:black">setDataVariance(osg::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">Object</span><span style="font-size:8.0pt;font-family:Consolas;color:black">::</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">DYNAMIC</span><span style="font-size:8.0pt;font-family:Consolas;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    tlayer</span><span style="font-size:8.0pt;font-family:Consolas;color:teal">-></span><span style="font-size:8.0pt;font-family:Consolas;color:black">getOrCreateStateSet()->setDataVariance(osg::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">Object</span><span style="font-size:8.0pt;font-family:Consolas;color:black">::</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">DYNAMIC</span><span style="font-size:8.0pt;font-family:Consolas;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    // tlayer</span><span style="font-size:8.0pt;font-family:Consolas;color:teal">-></span><span style="font-size:8.0pt;font-family:Consolas;color:black">disable(</span><span style="font-size:8.0pt;font-family:Consolas;color:#A31515">""</span><span style="font-size:8.0pt;font-family:Consolas;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    Threading::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">ScopedMutexLock</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
 exclusiveLock(_mutex);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    _map->removeLayer(tlayer);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:gray">layer</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
</span><span style="font-size:8.0pt;font-family:Consolas;color:teal">=</span><span style="font-size:8.0pt;font-family:Consolas;color:black">
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">new</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> osgEarth::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">ImageLayer</span><span style="font-size:8.0pt;font-family:Consolas;color:black">(</span><span style="font-size:8.0pt;font-family:Consolas;color:#A31515">"newlayer"</span><span style="font-size:8.0pt;font-family:Consolas;color:black">,
 gdaloptions);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:gray">layer</span><span style="font-size:8.0pt;font-family:Consolas;color:teal">-></span><span style="font-size:8.0pt;font-family:Consolas;color:black">setDataVariance(osg::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">Object</span><span style="font-size:8.0pt;font-family:Consolas;color:black">::</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">DYNAMIC</span><span style="font-size:8.0pt;font-family:Consolas;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:gray">layer</span><span style="font-size:8.0pt;font-family:Consolas;color:teal">-></span><span style="font-size:8.0pt;font-family:Consolas;color:black">getOrCreateStateSet()->setDataVariance(osg::</span><span style="font-size:8.0pt;font-family:Consolas;color:#2B91AF">Object</span><span style="font-size:8.0pt;font-family:Consolas;color:black">::</span><span style="font-size:8.0pt;font-family:Consolas;color:darkslategray">DYNAMIC</span><span style="font-size:8.0pt;font-family:Consolas;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    _map->addLayer(</span><span style="font-size:8.0pt;font-family:Consolas;color:gray">layer</span><span style="font-size:8.0pt;font-family:Consolas;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">delete</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> rrowbuff;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">delete</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> growbuff;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">delete</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> browbuff;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><span style="font-size:8.0pt;font-family:Consolas;color:blue">delete</span><span style="font-size:8.0pt;font-family:Consolas;color:black"> arowbuff;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">    Sleep(2000);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">   
</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">  }</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas;color:black">}</span><o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b>From:</b> Shannon Peterson
<br>
<b>Sent:</b> Friday, August 30, 2019 3:27 PM<br>
<b>To:</b> '<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a>' <<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a>><br>
<b>Subject:</b> questions about developing drivers for osg/osgEarth<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">I have a few questions about how to build a driver to do some specific tasks in osgEarth.<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Simple example.
<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Using simple ocean as an example replace the texture piece with geo-spacial image and then build a shader to add effect to the image.<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Ie. Arrowed line that changes color in towards the direction a path should be followed start to end. 
<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">The shader piece can be figured out by us working with the shader code.
<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">The part I am having issues with is adding an arrow image or geometry polygon of an arrow to the map at the position I need it at to run the shader effect on.<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Is this the correct place to aske this sort of question or is there a different mailing list or thread I should use to get help with getting this designed.<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Thank you in advance<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Shannon Peterson<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><a href="mailto:speterson@idealaero.com" target="_blank">speterson@idealaero.com</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:6.0pt;font-family:"Tahoma",sans-serif;color:#1F497D;text-transform:uppercase">The information contained in this email and any attachments is intended only
 for the personal and confidential use of the intended recipients. This email message may be or may contain privileged and confidential communications. If the reader of this e-mail is not an intended recipient, you are hereby notified that you have received
 this communication in error and that any retention, review, use, dissemination, distribution or copying of this communication or the information contained herein is strictly prohibited. If you have received this communication in error, please notify the sender
 immediately and delete the original message and all attachments from your system. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused, directly or indirectly, by any
 virus transmitted in this email. This communication may also contain data subject to U.S. export laws. If so, that data subject to the International Traffic in Arms Regulation (ITAR) cannot be disseminated, distributed or copied to foreign nationals, residing
 in the U.S. or abroad, absent the express prior approval of the U.S. Department of State. If you have received this communication in error, please notify the sender by reply e-mail and destroy the e-mail message and any physical copies made of the communication.
 Thank you.</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><o:p></o:p></p>
</blockquote>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><br clear="all">
<o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">--
<o:p></o:p></p>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal" align="center" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-align:center">
Chris 'Xenon' Hanson, omo sanza lettere. <a href="mailto:Xenon@AlphaPixel.com" target="_blank">
Xenon@AlphaPixel.com</a> <a href="http://www.alphapixel.com/" target="_blank">http://www.alphapixel.com/</a><o:p></o:p></p>
<p class="MsoNormal" align="center" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-align:center">
Training • Consulting • Contracting<o:p></o:p></p>
<p class="MsoNormal" align="center" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-align:center">
3D • Scene Graphs (Open Scene Graph/OSG) • OpenGL 2 • OpenGL 3 • OpenGL 4 • GLSL • OpenGL ES 1 • OpenGL ES 2 • OpenCL<o:p></o:p></p>
<p class="MsoNormal" align="center" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-align:center">
<span style="font-size:9.5pt">Legal/IP • Forensics • </span>Imaging <span style="font-size:9.5pt">• UAVs • GIS • GPS • osgEarth • Terrain • Telemetry • Cryptography • LIDAR • Embedded • Mobile • iPhone/iPad/iOS • Android</span><o:p></o:p></p>
<p class="MsoNormal" align="center" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-align:center">
<a href="https://twitter.com/alphapixel" target="_blank">@alphapixel</a> <a href="http://facebook.com/alphapixel" target="_blank">
facebook.com/alphapixel</a> (775) 623-PIXL [7495]<o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal">_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><o:p></o:p></p>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal">-- <o:p></o:p></p>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal" align="center" style="text-align:center">Chris 'Xenon' Hanson, omo sanza lettere.
<a href="mailto:Xenon@AlphaPixel.com">Xenon@AlphaPixel.com</a> <a href="http://www.alphapixel.com/" target="_blank">
http://www.alphapixel.com/</a><o:p></o:p></p>
<p class="MsoNormal" align="center" style="text-align:center">Training • Consulting • Contracting<o:p></o:p></p>
<p class="MsoNormal" align="center" style="text-align:center">3D • Scene Graphs (Open Scene Graph/OSG) • OpenGL 2 • OpenGL 3 • OpenGL 4 • GLSL • OpenGL ES 1 • OpenGL ES 2 • OpenCL<o:p></o:p></p>
<p class="MsoNormal" align="center" style="text-align:center"><span style="font-size:9.5pt">Legal/IP • Forensics • </span>Imaging <span style="font-size:9.5pt">• UAVs • GIS • GPS • osgEarth • Terrain • Telemetry • Cryptography • LIDAR • Embedded • Mobile •
 iPhone/iPad/iOS • Android</span><o:p></o:p></p>
<p class="MsoNormal" align="center" style="text-align:center"><a href="https://twitter.com/alphapixel" target="_blank">@alphapixel</a>
<a href="http://facebook.com/alphapixel" target="_blank">facebook.com/alphapixel</a> (775) 623-PIXL [7495]<o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>