QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
CheckerboardTextureData.cc
Go to the documentation of this file.
2
3#include <QtCore/QSize>
4
5#include <algorithm>
6
7CheckerboardTextureData::CheckerboardTextureData(QQuick3DObject* parent) : QQuick3DTextureData(parent)
8{
9 _rebuild();
10}
11
13{
14 const int clamped = std::clamp(sizePixels, 2, 2048);
15 if (clamped == _sizePixels) {
16 return;
17 }
18 _sizePixels = clamped;
19 emit sizePixelsChanged();
20 _rebuild();
21}
22
24{
25 // Fixed range (no cross-property dependence: QML property init order is unspecified);
26 // _rebuild() degrades cells > sizePixels to 1-pixel cells
27 const int clamped = std::clamp(cells, 1, 2048);
28 if (clamped == _cells) {
29 return;
30 }
31 _cells = clamped;
32 emit cellsChanged();
33 _rebuild();
34}
35
36void CheckerboardTextureData::setColor1(const QColor& color)
37{
38 if (color == _color1) {
39 return;
40 }
41 _color1 = color;
42 emit color1Changed();
43 _rebuild();
44}
45
46void CheckerboardTextureData::setColor2(const QColor& color)
47{
48 if (color == _color2) {
49 return;
50 }
51 _color2 = color;
52 emit color2Changed();
53 _rebuild();
54}
55
56void CheckerboardTextureData::_rebuild()
57{
58 const int size = _sizePixels;
59 const int cellPixels = std::max(1, size / _cells);
60
61 QByteArray data(qsizetype(size) * size * 4, Qt::Uninitialized);
62 uchar* p = reinterpret_cast<uchar*>(data.data());
63 for (int y = 0; y < size; y++) {
64 for (int x = 0; x < size; x++) {
65 const bool odd = (((x / cellPixels) + (y / cellPixels)) % 2) != 0;
66 const QColor& color = odd ? _color2 : _color1;
67 *p++ = static_cast<uchar>(color.red());
68 *p++ = static_cast<uchar>(color.green());
69 *p++ = static_cast<uchar>(color.blue());
70 *p++ = 255;
71 }
72 }
73
74 setSize(QSize(size, size));
75 setFormat(QQuick3DTextureData::RGBA8);
76 setHasTransparency(false);
77 setTextureData(data);
78}
void setSizePixels(int sizePixels)
CheckerboardTextureData(QQuick3DObject *parent=nullptr)
void setColor1(const QColor &color)
void setColor2(const QColor &color)