File indexing completed on 2024-05-19 16:34:46
0001 /* 0002 SPDX-FileCopyrightText: 2022 Vlad Zahorodnii <vlad.zahorodnii@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "kwineffects.h" 0010 #include "kwinglutils.h" 0011 #include "scene/itemrenderer.h" 0012 0013 namespace KWin 0014 { 0015 0016 class KWIN_EXPORT ItemRendererOpenGL : public ItemRenderer 0017 { 0018 public: 0019 struct RenderNode 0020 { 0021 GLTexture *texture = nullptr; 0022 RenderGeometry geometry; 0023 QMatrix4x4 transformMatrix; 0024 int firstVertex = 0; 0025 int vertexCount = 0; 0026 qreal opacity = 1; 0027 bool hasAlpha = false; 0028 TextureCoordinateType coordinateType = UnnormalizedCoordinates; 0029 qreal scale = 1.0; 0030 }; 0031 0032 struct RenderContext 0033 { 0034 QVector<RenderNode> renderNodes; 0035 QStack<QMatrix4x4> transformStack; 0036 QStack<qreal> opacityStack; 0037 const QRegion clip; 0038 const bool hardwareClipping; 0039 const qreal renderTargetScale; 0040 }; 0041 0042 ItemRendererOpenGL(); 0043 0044 void beginFrame(RenderTarget *renderTarget) override; 0045 void endFrame() override; 0046 0047 void renderBackground(const QRegion ®ion) override; 0048 void renderItem(Item *item, int mask, const QRegion ®ion, const WindowPaintData &data) override; 0049 0050 ImageItem *createImageItem(Scene *scene, Item *parent = nullptr) override; 0051 0052 private: 0053 QVector4D modulate(float opacity, float brightness) const; 0054 void setBlendEnabled(bool enabled); 0055 void createRenderNode(Item *item, RenderContext *context); 0056 0057 bool m_blendingEnabled = false; 0058 }; 0059 0060 } // namespace KWin