Kstars

dashedshader.h
1 /*
2  SPDX-FileCopyrightText: 2015 The Qt Company Ltd. <https://www.qt.io/licensing/>
3 
4  This file is part of the demonstration applications of the Qt Toolkit.
5 
6  $QT_BEGIN_LICENSE:LGPL21$
7  Commercial License Usage
8  Licensees holding valid commercial Qt licenses may use this file in
9  accordance with the commercial license agreement provided with the
10  Software or, alternatively, in accordance with the terms contained in
11  a written agreement between you and The Qt Company. For licensing terms
12  and conditions see https://www.qt.io/terms-conditions. For further
13  information use the contact form at https://www.qt.io/contact-us.
14 
15  GNU Lesser General Public License Usage
16  Alternatively, this file may be used under the terms of the GNU Lesser
17  General Public License version 2.1 or version 3 as published by the Free
18  Software Foundation and appearing in the file LICENSE.LGPLv21 and
19  LICENSE.LGPLv3 included in the packaging of this file. Please review the
20  following information to ensure the GNU Lesser General Public License
21  requirements will be met: https://www.gnu.org/licenses/lgpl.html and
22  http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23 
24  As a special exception, The Qt Company gives you certain additional
25  rights. These rights are described in The Qt Company LGPL Exception
26  version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27 
28  $QT_END_LICENSE$
29 
30 */
31 
32 #pragma once
33 
34 #include <qguiapplication.h>
35 
36 #include <qsgmaterial.h>
37 #include <qsgnode.h>
38 
39 #include <qquickitem.h>
40 #include <qquickview.h>
41 
42 #include <qsgsimplerectnode.h>
43 
44 #include <qsgsimplematerial.h>
45 
46 //! [1]
47 struct State
48 {
49  QColor color;
50 
51  int compare(const State *other) const
52  {
53  uint rgb = color.rgba();
54  uint otherRgb = other->color.rgba();
55 
56  if (rgb == otherRgb)
57  {
58  return 0;
59  }
60  else if (rgb < otherRgb)
61  {
62  return -1;
63  }
64  else
65  {
66  return 1;
67  }
68  }
69 };
70 //! [1]
71 
72 //! [2]
73 class Shader : public QSGSimpleMaterialShader<State>
74 {
76  //! [2] //! [3]
77  public:
78  const char *vertexShader() const
79  {
80  return "attribute highp vec4 aVertex; \n"
81  "attribute highp vec2 aTexCoord; \n"
82  "uniform highp mat4 qt_Matrix; \n"
83  "uniform highp mat4 mvp_matrix; \n"
84  "varying highp vec2 texCoord; \n"
85  "void main() { \n"
86  " gl_Position = qt_Matrix * aVertex; \n"
87  " texCoord = aTexCoord; \n"
88  "}";
89  }
90 
91  const char *fragmentShader() const
92  {
93  return "uniform lowp float qt_Opacity; \n"
94  "uniform lowp vec4 color; \n"
95  "varying highp vec2 texCoord; \n"
96  "void main () \n"
97  "{ \n"
98  //"if (cos(0.1*abs(distance(vec2(100.0,100.0).xy, texCoord.xy))) + 0.5 > 0.0) { \n"
99  "if(texCoord.x < 0.1 || texCoord.x > 0.2 && texCoord.x < 0.3) { \n"
100  " gl_FragColor = vec4(0.0,0.0,0.0,0.0) * qt_Opacity; \n"
101  " } else {\n"
102  " gl_FragColor = texCoord.y * texCoord.x * color * qt_Opacity; \n"
103  " }\n"
104  "}";
105  }
106  //! [3] //! [4]
108  {
109  return QList<QByteArray>() << "aVertex"
110  << "aTexCoord";
111  }
112  //! [4] //! [5]
113  void updateState(const State *state, const State *) { program()->setUniformValue(id_color, state->color); }
114  //! [5] //! [6]
115  void resolveUniforms() { id_color = program()->uniformLocation("color"); }
116 
117  private:
118  int id_color;
119  //! [6]
120 };
121 
122 //! [7]
124 {
125  public:
127  {
128  setGeometry(&m_geometry);
129 
130  QSGSimpleMaterial<State> *material = Shader::createMaterial();
134  }
135 
136  QSGGeometry m_geometry;
137 };
138 //! [7]
139 
140 //! [8]
141 class Item : public QQuickItem
142 {
143  Q_OBJECT
144 
145  Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
146 
147  public:
148  Item() { setFlag(ItemHasContents, true); }
149 
150  void setColor(const QColor &color)
151  {
152  if (m_color != color)
153  {
154  m_color = color;
155  emit colorChanged();
156  update();
157  }
158  }
159  QColor color() const { return m_color; }
160 
161  signals:
162  void colorChanged();
163 
164  private:
165  QColor m_color;
166 
167  //! [8] //! [9]
168  public:
169  QSGNode *updatePaintNode(QSGNode *node, UpdatePaintNodeData *)
170  {
171  ColorNode *n = static_cast<ColorNode *>(node);
172  if (!node)
173  n = new ColorNode();
174 
175  QSGGeometry::updateTexturedRectGeometry(n->geometry(), boundingRect(), QRectF(0, 0, 1, 1));
176  static_cast<QSGSimpleMaterial<State> *>(n->material())->state()->color = m_color;
177 
179 
180  return n;
181  }
182 };
183 
184 //#include "simplematerial.moc"
185 //! [11]
Q_OBJECTQ_OBJECT
void setFlag(QQuickItem::Flag flag, bool enabled)
[7]
Definition: dashedshader.h:141
Q_PROPERTY(...)
QSGMaterial * material() const const
void setFlag(QSGMaterial::Flags flags, bool on)
QSGNode * updatePaintNode(QSGNode *node, UpdatePaintNodeData *)
[8] //! [9]
Definition: dashedshader.h:169
void resolveUniforms()
[5] //! [6]
Definition: dashedshader.h:115
void setGeometry(QSGGeometry *geometry)
void update()
const QSGGeometry * geometry() const const
void updateTexturedRectGeometry(QSGGeometry *g, const QRectF &rect, const QRectF &textureRect)
QList< QByteArray > attributes() const
[3] //! [4]
Definition: dashedshader.h:107
const char * vertexShader() const
[2] //! [3]
Definition: dashedshader.h:78
void setMaterial(QSGMaterial *material)
void markDirty(QSGNode::DirtyState bits)
[1]
Definition: dashedshader.h:47
QSG_DECLARE_SIMPLE_COMPARABLE_SHADER(Shader, State)
QRgb rgba() const const
const QSGGeometry::AttributeSet & defaultAttributes_TexturedPoint2D()
void updateState(const State *state, const State *)
[4] //! [5]
Definition: dashedshader.h:113
void setFlag(QSGNode::Flag f, bool enabled)
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Tue Dec 6 2022 03:59:15 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.