109    : m_size(colorAttachment->size())
 
  110    , m_colorAttachment(colorAttachment)
 
  113        qCCritical(KWIN_OPENGL) << 
"Framebuffer objects aren't supported!";
 
  119        prevFbo = current->handle();
 
  122    glGenFramebuffers(1, &m_handle);
 
  123    glBindFramebuffer(GL_FRAMEBUFFER, m_handle);
 
  130    const GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
 
  131    glBindFramebuffer(GL_FRAMEBUFFER, prevFbo);
 
  133    if (status != GL_FRAMEBUFFER_COMPLETE) {
 
  135        qCCritical(KWIN_OPENGL) << 
"Invalid framebuffer status: " << formatFramebufferStatus(status);
 
  136        glDeleteFramebuffers(1, &m_handle);
 
 
  154    if (!m_foreign && m_valid) {
 
  155        glDeleteFramebuffers(1, &m_handle);
 
  158        glDeleteRenderbuffers(1, &m_depthBuffer);
 
  160    if (m_stencilBuffer && m_stencilBuffer != m_depthBuffer) {
 
  161        glDeleteRenderbuffers(1, &m_stencilBuffer);
 
 
  173    glViewport(0, 0, m_size.width(), m_size.height());
 
  189    if (s_supportsPackedDepthStencil) {
 
  190        glGenRenderbuffers(1, &buffer);
 
  191        glBindRenderbuffer(GL_RENDERBUFFER, buffer);
 
  192        glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, m_size.width(), m_size.height());
 
  193        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, buffer);
 
  194        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, buffer);
 
  196        if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
 
  197            glDeleteRenderbuffers(1, &buffer);
 
  199            m_depthBuffer = buffer;
 
  200            m_stencilBuffer = buffer;
 
  208        if (s_supportsDepth24) {
 
  209            depthFormat = GL_DEPTH_COMPONENT24;
 
  211            depthFormat = GL_DEPTH_COMPONENT16;
 
  214        depthFormat = GL_DEPTH_COMPONENT;
 
  217    glGenRenderbuffers(1, &buffer);
 
  218    glBindRenderbuffer(GL_RENDERBUFFER, buffer);
 
  219    glRenderbufferStorage(GL_RENDERBUFFER, depthFormat, m_size.width(), m_size.height());
 
  220    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, buffer);
 
  221    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
 
  222        glDeleteRenderbuffers(1, &buffer);
 
  224        m_depthBuffer = buffer;
 
  228    GLenum stencilFormat;
 
  230        stencilFormat = GL_STENCIL_INDEX8;
 
  232        stencilFormat = GL_STENCIL_INDEX;
 
  235    glGenRenderbuffers(1, &buffer);
 
  236    glBindRenderbuffer(GL_RENDERBUFFER, buffer);
 
  237    glRenderbufferStorage(GL_RENDERBUFFER, stencilFormat, m_size.width(), m_size.height());
 
  238    glFramebufferRenderbuffer(GL_RENDERBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, buffer);
 
  239    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
 
  240        glDeleteRenderbuffers(1, &buffer);
 
  242        m_stencilBuffer = buffer;
 
 
  255    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 
handle());
 
  256    glBindFramebuffer(GL_READ_FRAMEBUFFER, top->
handle());
 
  258    const QRect s = source.isNull() ? QRect(QPoint(0, 0), top->
size()) : source;
 
  259    const QRect d = destination.isNull() ? QRect(QPoint(0, 0), 
size()) : destination;
 
  261    GLuint srcX0 = s.x();
 
  262    GLuint srcY0 = top->
size().height() - (s.y() + s.height());
 
  263    GLuint srcX1 = s.x() + s.width();
 
  264    GLuint srcY1 = top->
size().height() - s.y();
 
  266        std::swap(srcX0, srcX1);
 
  269        std::swap(srcY0, srcY1);
 
  272    const GLuint dstX0 = d.x();
 
  273    const GLuint dstY0 = m_size.height() - (d.y() + d.height());
 
  274    const GLuint dstX1 = d.x() + d.width();
 
  275    const GLuint dstY1 = m_size.height() - d.y();
 
  277    glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, GL_COLOR_BUFFER_BIT, filter);
 
 
  295        const auto texture = sourceRenderTarget.
texture();
 
  304        mat.ortho(QRectF(QPointF(), 
size()));
 
  306        mat.translate(destination.x(), destination.y());
 
 
OutputTransform contentTransform() const