[SailfishDevel] Landscape mode in Sailfish?
Thomas Perl
th.perl at gmail.com
Thu Apr 10 08:04:39 UTC 2014
Hi,
On 2014-04-07 13:00, Iosif Hamlatzis wrote:
> ok I have managed to rotate my display and convert the touch
> co-ordinates but I have a lot flashes on the screen. I presume it has
> to do with the call to glScissor
>
> At some places in my code I call glScissor and glGetIntegerv modify
> and retrieve the scissor box. If I don't call these there is no
> problem I have no flashes but obviously my rendering is wrong as I
> render outside my rectangle.
>
> Does the rotation matrix (either in projection or model view mode)
> affect the glScissor and glGetIntegerv calls or do I have to manually
> calculate the rotation for the scissor box?
glScissor operates on "window coordinates" (just like, for example,
glViewport):
https://www.khronos.org/opengles/sdk/docs/man/xhtml/glScissor.xml
How to get from object coordinates to world coordinates is described here:
http://www.opengl.org/sdk/docs/man2/xhtml/gluProject.xml
(you usually don't have gluProject available in GLES directly, as it's
part of GLU)
In some simple cases, you might be able to just swap the axes and
subtract the axis value from the width/height to rotate it by 90 degrees
instead of going through the full matrix multiplication.
So yes, you have to manually calculate the rotation for the scissor box;
the easiest being to do the same that gluProject does.
HTH :)
Thomas
> The code I use for scissoring is:
>
> //---------------------------------------------------------------------------------------------------------
> RECT Presenter::ClippingRegion() const
> {
> RECT rc;
> SetRect( &rc, 0, 0, mnScreenWidth, mnScreenHeight);
>
> if ( glIsEnabled(GL_SCISSOR_TEST) )
> {
> GLint clip[4];
> glGetIntegerv( GL_SCISSOR_BOX, &(clip[0]) );
>
> SetRect(&rc, clip[0], clip[1], (clip[0]+clip[2]), (clip[1]+clip[3] );
> }
>
> return rc;
> }
> //---------------------------------------------------------------------------------------------------------
> void Presenter::ClippingRegion(const RECT& rc)
> {
> glEnable( GL_SCISSOR_TEST );
>
> GLsizei width = rc.right - rc.left;
> GLsizei height = rc.bottom - rc.top;
>
> GLint x = rc.left;
> GLint y = rc.top;
> GLint y_modified = mnScreenHeight-(y+height);
>
> glScissor(x, y_modified, width, height);
> }
>
> Where in the above code RECT is a struct similar to Microsoft's RECT
> and SetRect(left, top, right, bottom) is a function similar to
> Microsoft's for setting left, top, right and bottom co-ordinates for a
> RECT.
>
> So do I have to calculate the rotation for the parameters or is it
> automatically done by the rotation matrix?
>
>
>
> _______________________________________________
> SailfishOS.org Devel mailing list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.sailfishos.org/pipermail/devel/attachments/20140410/a118629f/attachment.html>
More information about the Devel
mailing list