|
|
|
@ -91,10 +91,9 @@ void OffscreenEffect::apply(EffectWindow *window, int mask, WindowPaintData &dat
|
|
|
|
|
|
|
|
|
|
void OffscreenData::maybeRender(EffectWindow *window)
|
|
|
|
|
{
|
|
|
|
|
QRectF logicalGeometry = window->expandedGeometry();
|
|
|
|
|
// FIXME no render target, as this isn't always called from rendering code
|
|
|
|
|
// The texture size should take the scale into account though...
|
|
|
|
|
QSize textureSize = logicalGeometry.toAlignedRect().size();
|
|
|
|
|
const QRectF logicalGeometry = window->expandedGeometry();
|
|
|
|
|
const qreal scale = window->screen()->devicePixelRatio();
|
|
|
|
|
const QSize textureSize = (logicalGeometry.size() * scale).toSize();
|
|
|
|
|
|
|
|
|
|
if (!m_texture || m_texture->size() != textureSize) {
|
|
|
|
|
m_texture = GLTexture::allocate(GL_RGBA8, textureSize);
|
|
|
|
@ -109,13 +108,13 @@ void OffscreenData::maybeRender(EffectWindow *window)
|
|
|
|
|
|
|
|
|
|
if (m_isDirty) {
|
|
|
|
|
RenderTarget renderTarget(m_fbo.get());
|
|
|
|
|
RenderViewport viewport(logicalGeometry, 1, renderTarget);
|
|
|
|
|
RenderViewport viewport(logicalGeometry, scale, renderTarget);
|
|
|
|
|
GLFramebuffer::pushFramebuffer(m_fbo.get());
|
|
|
|
|
glClearColor(0.0, 0.0, 0.0, 0.0);
|
|
|
|
|
glClear(GL_COLOR_BUFFER_BIT);
|
|
|
|
|
|
|
|
|
|
QMatrix4x4 projectionMatrix;
|
|
|
|
|
projectionMatrix.ortho(QRectF(0, 0, logicalGeometry.width(), logicalGeometry.height()));
|
|
|
|
|
projectionMatrix.ortho(QRectF(0, 0, textureSize.width(), textureSize.height()));
|
|
|
|
|
|
|
|
|
|
WindowPaintData data;
|
|
|
|
|
data.setXTranslation(-logicalGeometry.x());
|
|
|
|
|