<div dir="ltr">hi Markus<div>hope you enjoy your vacation</div><div>and thanks for the feedback<div><br></div><div>inline<div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 17, 2014 at 2:58 PM, Markus Mohrhard <span dir="ltr"><<a href="mailto:markus.mohrhard@googlemail.com" target="_blank">markus.mohrhard@googlemail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><p dir="ltr">Hey,</p>
<p dir="ltr">So I will only be able to provide a short feedback as I'm still on vacation for another month and don't have access to any computer.</p><span class="">
<p dir="ltr">On Sep 17, 2014 9:29 PM, "Ptyl Dragon" <<a href="mailto:ptyl@cloudon.com" target="_blank">ptyl@cloudon.com</a>> wrote:<br>
><br>
> This week we (CloudOn) did a kick off for the openGL project,<br>
> mainly reviewing OpenGL, and what we know of the requirements for the project.<br>
><br>
> My conclusions so far (feel free to correct them. i'm an OpenGL noob):<br>
><br>
> 1. We should use OpenGL 3.0 ES API - i.e use the 3.0 ES API subset, even when using non OpenGL ES (e.g on linux, osx, windows)</p>
</span><p dir="ltr">That is way too young. Currently I think we should target Opengl 2.1 and keep an option for OpenGL 3.2 open. That would mean we would target something along of OpenGL ES 2.0. I can't check right now the differences between the es version and the normal opengl version.</p></blockquote><div>ok, then we'll use GL2.1. we'll make sure we use only API used in ES 2 too.</div><div>We need simple thing. after all, we are not making a First Person Shooter. For starters we are just making a 2d rendering engine</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">
<p dir="ltr">> 2. Use cases:<br>
><br>
>      a. Tiled rendering (i.e mobile) -<br>
><br>
>          i. OpenGL renders to a memory buffer. It would be best if the tile memory would have been this memory buffer, but if not, then this memory buffer is later copied to the tile OpenGL context.<br>
>          ii. Context creation is handled by the Mobile app<br>
>          iii. this is the simple case<br>
><br>
>     b. Window (i.e Desktop) -<br>
><br>
>         i. LibreOffice's SalInstance should create an OpenGL window, and provide the openGL context (enabling the option can be denoted via a compilation flag). This needs to be done per OS, though possibly, can be simplified via abstraction frameworks such as SDL, or what have you. Possibly, this task is a good candidate for mentoring</p>
</span><p dir="ltr">We have that already. The OpenGLContext class abstracts the creation of a context. We can't use an existing framework as it needs to integrate with vcl at least on the desktop.</p></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=""><p dir="ltr">good to know</p></span></blockquote><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=""><p dir="ltr">>         ii. the rendering is done via 3 buffers: 2 buffers (front and back) for de-interlacing, and 1 back layer buffer for actual rendering. Additionally, for stuff like copy area, we might require temp buffers for bit blit, and resending these bitmaps back to the GPU. Would be happy to find a better solution, as it sounds like copying the same bitmap 4 times...</p>
</span><p dir="ltr">At least on the desktop this is not true. We have automatic front and back buffer. I know that this is a bit more complicated on mobile platforms but even then I think you only need 2 FBO. The place where you want a FBO for copy operations textures seem like the better idea.</p></blockquote><div><br></div><div>I don't think i follow. </div><div>Is the idea is to keep using the current rendering mechanism, and just use OpenGL to render lines and rectangles?</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=""></span></blockquote><div><br></div><div>in any case, for tiled rendering, we want to render all the elements in the tile together and at once, per tile. If this is all done by OpenGL, it would ensure the performance we require. </div><div>Also note that in tiled rendering, notions like copyArea are irrelevant, as by definition, each tile contains nothing of the neighboring tiles.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">
<p dir="ltr">>         iii. this is the complex case, and as such, arguably, we should begin the work on tiled rendering, then apply the solution on the window / Desktop case, in a later iteration.</p>
</span><p dir="ltr">I totally disagree here. The desktop stuff is already working and it is only some work necessary to create a new vcl plugin. I would prefer if we start there as this can easily be tested by many people and the development plan is already available (see the estimation that Michael shared with you). For the tiled rendering we first need to work on some infrastructure problems that are not yet fully understood.</p></blockquote><div>I would like to understand the details of what you just said:<br></div><div>1. what exactly is the thing that is already working on desktop? (explanation + code pointers)</div><div>2. what are VCL plugins? Does VCL have a plugin infrastructure ? does it use dynamic linking (if so, it won't work for iOS)? it would be great if someone could direct me to some code pointers that show how this plugin infrastructure works</div><div>3. I'm not sure if i saw the OpenGL development plan, so i'd be happy if anyone could direct me to it.</div><div><br></div><div>I want to learn all there is to learn, so to be able to actively expedite this front (i.e hack the way myself)</div><div><br></div><div>As Markus is now on vacation, </div><div>perhaps someone else can help me with these issues?</div><div><br></div><div>I don't want to stall a month now, as I believe we can make progress in this time frame</div><div>   </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">
<p dir="ltr">><br>
> 3. Shaders - For simplicity and performance (i.e to not compile shaders again and again), we should use one costant naive Vertex shader all the time, and one constant Fragment shader, which uses if statements to differentiate between 2 states - solid color, and texture. AFAIK, VCL does not use any other more complex rendering. Note also, that if statements in GLSL are optimized on the GPU, so using them should not cost performance.</p>
</span><p dir="ltr">That sounds just wrong. You only need to compile your shaders once if you correctly manage the life cycle of them. We most likely only need one vertex shader bit should use a few different fragment shaders. Especially to handle some more complex features like gradients efficiently. One of the ideas of creating an OpenGL context was that we could move some of these ugly tasks like drawing gradients to the GPU.</p></blockquote><div><br></div><div>If it will make things simple, efficient, and maintainable, then all good with me,</div><div>again, i'm an OpenGL noob, and i don't know where the performance bottlenecks are</div><div>Still, to prevent a waterfall scenario, let's wait with the gradient handling, and the drawing layer optimizations in general, until we have things working in VCL without it.  </div><div><br></div><div>As i said above</div><div>Considering all you have just mentioned, i think i need far better understanding of the current status.</div><div>I need more visibility as for what was done, what is currently done, and what needs to be done, not just in general terms, but with actual code references, so that i could too start hacking.</div><div><br></div><div>As you said, you are now on vacation, so perhaps someone else could  </div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<p dir="ltr"></p><div><div class="h5">><br>
> 4. Text - would be rendered using the current software implementation, and rendered via openGL, as bitmaps.<br>
><br>
> Considering these, action items are (VERY roughly):<br>
><br>
> A. add build flags if necessary<br>
> B. decide whether to approach tiled rendering first. If so, solve context creation on mobile apps. If not, implement the OpenGL context creation for SalInstances on all OSes<br>
> C. Write the shader<br>
> D. Replace the VCL primitive drawing functions one by one, with OpenGL counterparts<br>
> E. Handle the copy area case<br>
> F. Handle the Bitmap case<br>
> G. Handle the text case<br>
><br>
> if agreed upon, we could distribute the action items, and begin the actual work<br>
><br>
> On Wed, Sep 17, 2014 at 1:10 PM, Michael Meeks <<a href="mailto:michael.meeks@collabora.com" target="_blank">michael.meeks@collabora.com</a>> wrote:<br>
>><br>
>><br>
>> On Wed, 2014-09-17 at 11:47 +0200, Jan-Marek Glogowski wrote:<br>
>> > AFAIK Miklos was Michaels suggestion for the mentoring - can't remember.<br>
>><br>
>>         Matus is the XFastParser expert =) I guess it'd be nice to have a small<br>
>> XFastParser unit test as well (as some sort of entry-level easy-hack<br>
>> there).<br>
>><br>
>> > Probably we should simply add a Wiki page for easier coordination?<br>
>><br>
>>         Sure - why not =)<br>
>><br>
>> > Comments please<br>
>><br>
>>         All sounds sensible, my hope is that we can mentor interactively and<br>
>> superimpose the two-weekly "what got done" meetings =)<br>
>><br>
>>         Anyhow - exciting tasks !<br>
>><br>
>>         ATB,<br>
>><br>
>>                 Michael.<br>
>><br>
>> --<br>
>>  <a href="mailto:michael.meeks@collabora.com" target="_blank">michael.meeks@collabora.com</a>  <><, Pseudo Engineer, itinerant idiot<br>
>><br>
><br>
><br>
><br>
> -- <br>
><br>
><br>
>  <br>
><br></div></div><span class="">
> Ptyl Dragon<br>
><br>
> Twitter | LinkedIn | Facebook | Blog<br>
><br>
>  <br>
><br>
>  <br>
><br>
><br>
><br></span>
> _______________________________________________<br>
> LibreOffice mailing list<br>
> <a href="mailto:LibreOffice@lists.freedesktop.org" target="_blank">LibreOffice@lists.freedesktop.org</a><br>
> <a href="http://lists.freedesktop.org/mailman/listinfo/libreoffice" target="_blank">http://lists.freedesktop.org/mailman/listinfo/libreoffice</a><br>
><br>
<p></p>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><br><table border="0" cellpadding="0" cellspacing="0" style="font-family:arial;font-size:small"><tbody><tr><td style="width:51pt;padding:0.75pt" width="68"><pre style="font-family:'Droid Sans Mono','Lucida Console','Andale Mono','Courier New',Courier,monospace;font-size:12px;line-height:12px;color:rgb(0,0,0)"><img alt="appicon.png" height="63" src="http://site.cloudon.com/wp-content/uploads/2012/05/appicon.png" width="64" style="line-height: normal; color: rgb(34, 34, 34); font-family: Helvetica, sans-serif; font-size: 9pt;"><br></pre>
                                </td>
                                <td>
                                         </td>
                                <td style="width:207pt;padding:0.75pt" width="276">
                                        <p style="margin-right:0.4pt;margin-bottom:0.0001pt;margin-left:0.4pt">
                                                <strong>Ptyl Dragon</strong><br>
                                                <br>
                                                <a href="http://www.twitter.com/cloudoninc" style="color:rgb(17,85,204)" target="_blank"><span style="font-size:10pt;font-family:Helvetica,sans-serif;color:rgb(148,201,71);text-decoration:none">Twitter</span></a><span style="font-size:11.5pt;font-family:Helvetica,sans-serif"> </span><span style="font-size:10pt;font-family:Helvetica,sans-serif;color:rgb(102,102,102)">|</span><span style="font-size:11.5pt;font-family:Helvetica,sans-serif"> </span><a href="http://www.linkedin.com/company/cloudon" style="color:rgb(17,85,204)" target="_blank"><span style="font-size:10pt;font-family:Helvetica,sans-serif;color:rgb(148,201,71);text-decoration:none">LinkedIn</span></a><span style="font-size:10pt;font-family:Helvetica,sans-serif;color:rgb(102,102,102)"> |</span><span style="font-size:11.5pt;font-family:Helvetica,sans-serif"> </span><a href="http://www.facebook.com/cloudoninc" style="color:rgb(17,85,204)" target="_blank"><span style="font-size:10pt;font-family:Helvetica,sans-serif;color:rgb(148,201,71);text-decoration:none">Facebook</span></a><span style="font-size:11.5pt;font-family:Helvetica,sans-serif"> </span><span style="font-size:10pt;font-family:Helvetica,sans-serif;color:rgb(102,102,102)">|</span><span style="font-size:11.5pt;font-family:Helvetica,sans-serif"> </span><a href="http://site.cloudon.com/blog" style="color:rgb(17,85,204)" target="_blank"><span style="font-size:10pt;font-family:Helvetica,sans-serif;color:rgb(148,201,71);text-decoration:none">Blog</span></a></p>
                                </td>
                        </tr>
                </tbody>
        </table>
        <table border="0" cellpadding="0" cellspacing="0">
                <tbody>
                        <tr>
                                <td style="width:51pt;padding:0.75pt" width="68">
                                         </td>
                                <td style="width:207pt;padding:0.75pt" width="276">
                                        <p style="margin:0in 0.4pt 0.0001pt">
                                                 </p>
                                </td>
                        </tr>
                </tbody>
        </table>
</div>
<br></div>
</div></div></div></div>