forked from rogii-com/SceneSample
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFlatColorSceneMaterial.cpp
87 lines (69 loc) · 1.99 KB
/
FlatColorSceneMaterial.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "FlatColorSceneMaterial.hpp"
namespace rogii
{
namespace qt_quick
{
namespace
{
class Shader : public SceneShader
{
public:
Shader()
: mMatrixUniformId(-1)
, mColorUniformId(-1)
{
setShaderSourceFile(QOpenGLShader::Vertex, QLatin1String(":/SceneSample/FlatColor.vert"));
setShaderSourceFile(QOpenGLShader::Fragment, QLatin1String(":/SceneSample/FlatColor.frag"));
}
const char * const * attributeNames() const override
{
static char const *const names[] = { "vertex", nullptr };
return names;
}
void initialize() override
{
// don't bind program - see comments to SceneShader
QSGMaterialShader::initialize();
mMatrixUniformId = program()->uniformLocation("matrix");
mColorUniformId = program()->uniformLocation("color");
}
void updateState(const SceneRenderState & renderState, SceneMaterial * newMaterial, SceneMaterial * oldMaterial) override
{
const FlatColorSceneMaterial * m(static_cast<FlatColorSceneMaterial *>(newMaterial));
program()->setUniformValue(mMatrixUniformId, renderState.getCombinedMatrix());
program()->setUniformValue(mColorUniformId, m->getColor());
}
private:
int mMatrixUniformId;
int mColorUniformId;
};
} //~anonymous namespace
FlatColorSceneMaterial::FlatColorSceneMaterial(const Scene & sceneItem)
: SceneMaterial(sceneItem)
, mColor(Qt::black)
{
}
FlatColorSceneMaterial::FlatColorSceneMaterial(const Scene & sceneItem, const QColor & color)
: SceneMaterial(sceneItem)
, mColor(color)
{
}
QSGMaterialType * FlatColorSceneMaterial::type() const
{
static QSGMaterialType type;
return &type;
}
QSGMaterialShader * FlatColorSceneMaterial::createShader() const
{
return new Shader();
}
const QColor & FlatColorSceneMaterial::getColor() const
{
return mColor;
}
void FlatColorSceneMaterial::setColor(const QColor & color)
{
mColor = color;
}
} //~namespace qt_quick
} //~namespace rogii