KWin
Loading...
Searching...
No Matches
itemrenderer_opengl.h
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2022 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#pragma once
8
9#include "opengl/glutils.h"
11#include "scene/itemrenderer.h"
12
13namespace KWin
14{
15
16class KWIN_EXPORT ItemRendererOpenGL : public ItemRenderer
17{
18public:
20 {
21 std::variant<GLTexture *, OpenGLSurfaceContents> texture;
23 QMatrix4x4 transformMatrix;
24 int firstVertex = 0;
25 int vertexCount = 0;
26 qreal opacity = 1;
27 bool hasAlpha = false;
29 qreal scale = 1.0;
31 };
32
34 {
35 QList<RenderNode> renderNodes;
36 QStack<QMatrix4x4> transformStack;
37 QStack<qreal> opacityStack;
38 const QMatrix4x4 projectionMatrix;
39 const QRegion clip;
40 const bool hardwareClipping;
41 const qreal renderTargetScale;
42 };
43
45
46 void beginFrame(const RenderTarget &renderTarget, const RenderViewport &viewport) override;
47 void endFrame() override;
48
49 void renderBackground(const RenderTarget &renderTarget, const RenderViewport &viewport, const QRegion &region) override;
50 void renderItem(const RenderTarget &renderTarget, const RenderViewport &viewport, Item *item, int mask, const QRegion &region, const WindowPaintData &data) override;
51
52 std::unique_ptr<ImageItem> createImageItem(Scene *scene, Item *parent = nullptr) override;
53
54private:
55 QVector4D modulate(float opacity, float brightness) const;
56 void setBlendEnabled(bool enabled);
57 void createRenderNode(Item *item, RenderContext *context);
58 void visualizeFractional(const RenderViewport &viewport, const QRegion &region, const RenderContext &renderContext);
59
60 bool m_blendingEnabled = false;
61
62 struct
63 {
64 bool fractionalEnabled = false;
65 std::unique_ptr<GLShader> fractionalShader;
66 } m_debug;
67};
68
69} // namespace KWin
std::unique_ptr< GLShader > fractionalShader
TextureCoordinateType
Definition gltexture.h:34
@ UnnormalizedCoordinates
Definition gltexture.h:36
std::variant< GLTexture *, OpenGLSurfaceContents > texture