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 ®ion) = 0; 0059 0060 protected: 0061 OpenGLBackend *m_backend; 0062 OpenGLSurfaceContents m_texture; 0063 }; 0064 0065 } // namespace KWin