Generate texture coordinates for limited NPOT support

Fixes rendering issues with R300 and similar GPUs. If the texture
uses GL_TEXTURE_RECTANGLE_ARB as target the tex coordinates need
to be adjusted. This at least fixes missing text on EffectFrames
with graphicssystem native on R300. Hopefully more issues are
resolved by the change.

BUG: 269576
CCBUG: 282882
FIXED-IN: 4.7.3
This commit is contained in:
Martin Gräßlin 2011-10-15 14:14:44 +02:00
parent 15fc864c95
commit fb2fbed035

View file

@ -280,11 +280,18 @@ void GLTexture::render(QRegion region, const QRect& rect)
r.x() + rect.width(), r.y(),
r.x() + rect.width(), r.y() + rect.height()
};
#ifdef KWIN_HAVE_OPENGLES
const float texWidth = 1.0f;
const float texHeight = 1.0f;
#else
const float texWidth = (target() == GL_TEXTURE_RECTANGLE_ARB) ? width() : 1.0f;
const float texHeight = (target() == GL_TEXTURE_RECTANGLE_ARB) ? height() : 1.0f;
#endif
const float texcoords[ 4 * 2 ] = {
0.0f, d->m_yInverted ? 0.0f : 1.0f, // y needs to be swapped (normalized coords)
0.0f, d->m_yInverted ? 1.0f : 0.0f,
1.0f, d->m_yInverted ? 0.0f : 1.0f,
1.0f, d->m_yInverted ? 1.0f : 0.0f
0.0f, d->m_yInverted ? 0.0f : texHeight, // y needs to be swapped (normalized coords)
0.0f, d->m_yInverted ? texHeight : 0.0f,
texWidth, d->m_yInverted ? 0.0f : texHeight,
texWidth, d->m_yInverted ? texHeight : 0.0f
};
d->m_vbo->setData(4, 2, verts, texcoords);
}