Reflected cube uses QMatrix4x4
This commit is contained in:
parent
8c4db8f734
commit
fe614119e5
1 changed files with 2 additions and 14 deletions
|
@ -373,17 +373,11 @@ void CubeEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
||||||
{
|
{
|
||||||
// restrict painting the reflections to the current screen
|
// restrict painting the reflections to the current screen
|
||||||
PaintClipper::push( QRegion( rect ));
|
PaintClipper::push( QRegion( rect ));
|
||||||
#ifndef KWIN_HAVE_OPENGLES
|
|
||||||
glPushMatrix();
|
|
||||||
#endif
|
|
||||||
// we can use a huge scale factor (needed to calculate the rearground vertices)
|
// we can use a huge scale factor (needed to calculate the rearground vertices)
|
||||||
// as we restrict with a PaintClipper painting on the current screen
|
// as we restrict with a PaintClipper painting on the current screen
|
||||||
float scaleFactor = 1000000 * tan( 60.0 * M_PI / 360.0f )/rect.height();
|
float scaleFactor = 1000000 * tan( 60.0 * M_PI / 360.0f )/rect.height();
|
||||||
m_reflectionMatrix.setToIdentity();
|
m_reflectionMatrix.setToIdentity();
|
||||||
m_reflectionMatrix.scale(1.0, -1.0, 1.0);
|
m_reflectionMatrix.scale(1.0, -1.0, 1.0);
|
||||||
#ifndef KWIN_HAVE_OPENGLES
|
|
||||||
glScalef( 1.0, -1.0, 1.0 );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// TODO reflection is not correct when mixing manual (mouse) rotating with rotation by cursor keys
|
// TODO reflection is not correct when mixing manual (mouse) rotating with rotation by cursor keys
|
||||||
// there's also a small bug when zooming
|
// there's also a small bug when zooming
|
||||||
|
@ -392,18 +386,12 @@ void CubeEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
||||||
if( manualVerticalAngle > 0.0f && effects->numberOfDesktops() & 1 )
|
if( manualVerticalAngle > 0.0f && effects->numberOfDesktops() & 1 )
|
||||||
{
|
{
|
||||||
m_reflectionMatrix.translate(0.0, cos( fabs( manualAngle ) * M_PI / 360.0f * float( effects->numberOfDesktops() ) ) * addedHeight2 + addedHeight1 - float( rect.height() ), 0.0);
|
m_reflectionMatrix.translate(0.0, cos( fabs( manualAngle ) * M_PI / 360.0f * float( effects->numberOfDesktops() ) ) * addedHeight2 + addedHeight1 - float( rect.height() ), 0.0);
|
||||||
#ifndef KWIN_HAVE_OPENGLES
|
|
||||||
glTranslatef( 0.0, cos( fabs( manualAngle ) * M_PI / 360.0f * float( effects->numberOfDesktops() ) ) * addedHeight2 + addedHeight1 - float( rect.height() ), 0.0 );
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_reflectionMatrix.translate(0.0, sin( fabs( manualAngle ) * M_PI / 360.0f * float( effects->numberOfDesktops() ) ) * addedHeight2 + addedHeight1 - float( rect.height() ), 0.0);
|
m_reflectionMatrix.translate(0.0, sin( fabs( manualAngle ) * M_PI / 360.0f * float( effects->numberOfDesktops() ) ) * addedHeight2 + addedHeight1 - float( rect.height() ), 0.0);
|
||||||
#ifndef KWIN_HAVE_OPENGLES
|
|
||||||
glTranslatef( 0.0, sin( fabs( manualAngle ) * M_PI / 360.0f * float( effects->numberOfDesktops() ) ) * addedHeight2 + addedHeight1 - float( rect.height() ), 0.0 );
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
pushMatrix(m_reflectionMatrix);
|
||||||
|
|
||||||
#ifndef KWIN_HAVE_OPENGLES
|
#ifndef KWIN_HAVE_OPENGLES
|
||||||
// TODO: find a solution for GLES
|
// TODO: find a solution for GLES
|
||||||
|
@ -454,8 +442,8 @@ void CubeEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
||||||
#ifndef KWIN_HAVE_OPENGLES
|
#ifndef KWIN_HAVE_OPENGLES
|
||||||
// TODO: find a solution for GLES
|
// TODO: find a solution for GLES
|
||||||
glDisable( GL_CLIP_PLANE0 );
|
glDisable( GL_CLIP_PLANE0 );
|
||||||
glPopMatrix();
|
|
||||||
#endif
|
#endif
|
||||||
|
popMatrix();
|
||||||
|
|
||||||
float vertices[] = {
|
float vertices[] = {
|
||||||
-rect.width()*0.5f, rect.height(), 0.0,
|
-rect.width()*0.5f, rect.height(), 0.0,
|
||||||
|
|
Loading…
Reference in a new issue