File indexing completed on 2024-05-26 05:33:12

0001 /*
0002     SPDX-FileCopyrightText: 2021 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "scene/surfaceitem.h"
0010 
0011 namespace KWin
0012 {
0013 
0014 class GLShader;
0015 class GLTexture;
0016 class OpenGLBackend;
0017 
0018 class KWIN_EXPORT OpenGLSurfaceContents
0019 {
0020 public:
0021     OpenGLSurfaceContents()
0022     {
0023     }
0024     OpenGLSurfaceContents(const std::shared_ptr<GLTexture> &contents)
0025         : planes({contents})
0026     {
0027     }
0028     OpenGLSurfaceContents(const QList<std::shared_ptr<GLTexture>> &planes)
0029         : planes(planes)
0030     {
0031     }
0032 
0033     void setDirty();
0034     void reset()
0035     {
0036         planes.clear();
0037     }
0038     bool isValid() const
0039     {
0040         return !planes.isEmpty();
0041     }
0042 
0043     QList<std::shared_ptr<GLTexture>> planes;
0044 };
0045 
0046 class KWIN_EXPORT OpenGLSurfaceTexture : public SurfaceTexture
0047 {
0048 public:
0049     explicit OpenGLSurfaceTexture(OpenGLBackend *backend);
0050     ~OpenGLSurfaceTexture() override;
0051 
0052     bool isValid() const override;
0053 
0054     OpenGLBackend *backend() const;
0055     OpenGLSurfaceContents texture() const;
0056 
0057     virtual bool create() = 0;
0058     virtual void update(const QRegion &region) = 0;
0059 
0060 protected:
0061     OpenGLBackend *m_backend;
0062     OpenGLSurfaceContents m_texture;
0063 };
0064 
0065 } // namespace KWin