aboutsummaryrefslogtreecommitdiffstats
path: root/src/particles
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@digia.com>2014-02-03 17:36:55 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-18 21:00:00 +0100
commita2e92f6dee12320a58a4bcc95c14649b27804427 (patch)
tree3198365f9f7ca75cc3c4bd23340bb5fe15ee63a5 /src/particles
parent337524714cad51934879d817564c5d58e6dbd0c0 (diff)
Dynamic GL in Quick
The counterpart to I716fdebb. Implements the dynamic path in scenegraph. Task-number: QTBUG-36483 Change-Id: I2dc613ba84560b7b8e36d3cd1da61c050ab08db0 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
Diffstat (limited to 'src/particles')
-rw-r--r--src/particles/qquickcustomparticle.cpp17
-rw-r--r--src/particles/qquickimageparticle.cpp68
2 files changed, 43 insertions, 42 deletions
diff --git a/src/particles/qquickcustomparticle.cpp b/src/particles/qquickcustomparticle.cpp
index a3b41d0eb2..c112283822 100644
--- a/src/particles/qquickcustomparticle.cpp
+++ b/src/particles/qquickcustomparticle.cpp
@@ -269,6 +269,8 @@ QQuickShaderEffectNode *QQuickCustomParticle::prepareNextFrame(QQuickShaderEffec
return 0;
if (m_dirtyProgram) {
+ const bool isES = QOpenGLContext::currentContext()->isES();
+
QQuickShaderEffectMaterial *material = static_cast<QQuickShaderEffectMaterial *>(rootNode->material());
Q_ASSERT(material);
@@ -276,17 +278,16 @@ QQuickShaderEffectNode *QQuickCustomParticle::prepareNextFrame(QQuickShaderEffec
QSGShaderSourceBuilder builder;
if (s.sourceCode[Key::FragmentShader].isEmpty()) {
builder.appendSourceFile(QStringLiteral(":/particles/shaders/customparticle.frag"));
-#if defined(QT_OPENGL_ES_2)
- builder.removeVersion();
-#endif
+ if (isES)
+ builder.removeVersion();
s.sourceCode[Key::FragmentShader] = builder.source();
builder.clear();
}
builder.appendSourceFile(QStringLiteral(":/particles/shaders/customparticletemplate.vert"));
-#if defined(QT_OPENGL_ES_2)
- builder.removeVersion();
-#endif
+ if (isES)
+ builder.removeVersion();
+
if (s.sourceCode[Key::VertexShader].isEmpty())
builder.appendSourceFile(QStringLiteral(":/particles/shaders/customparticle.vert"));
s.sourceCode[Key::VertexShader] = builder.source() + s.sourceCode[Key::VertexShader];
@@ -310,12 +311,10 @@ QQuickShaderEffectNode *QQuickCustomParticle::prepareNextFrame(QQuickShaderEffec
QQuickShaderEffectNode* QQuickCustomParticle::buildCustomNodes()
{
-#ifdef QT_OPENGL_ES_2
- if (m_count * 4 > 0xffff) {
+ if (QOpenGLContext::currentContext()->isES() && m_count * 4 > 0xffff) {
printf("CustomParticle: Too many particles... \n");
return 0;
}
-#endif
if (m_count <= 0) {
printf("CustomParticle: Too few particles... \n");
diff --git a/src/particles/qquickimageparticle.cpp b/src/particles/qquickimageparticle.cpp
index e5845f4c62..f7f0b6660b 100644
--- a/src/particles/qquickimageparticle.cpp
+++ b/src/particles/qquickimageparticle.cpp
@@ -100,15 +100,15 @@ public:
TabledMaterial()
{
QSGShaderSourceBuilder builder;
+ const bool isES = QOpenGLContext::currentContext()->isES();
builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.vert"));
builder.addDefinition(QByteArray(SHADER_PLATFORM_DEFINES));
builder.addDefinition(QByteArrayLiteral("TABLE"));
builder.addDefinition(QByteArrayLiteral("DEFORM"));
builder.addDefinition(QByteArrayLiteral("COLOR"));
-#if defined(QT_OPENGL_ES_2)
- builder.removeVersion();
-#endif
+ if (isES)
+ builder.removeVersion();
m_vertex_code = builder.source();
builder.clear();
@@ -118,9 +118,9 @@ public:
builder.addDefinition(QByteArrayLiteral("TABLE"));
builder.addDefinition(QByteArrayLiteral("DEFORM"));
builder.addDefinition(QByteArrayLiteral("COLOR"));
-#if defined(QT_OPENGL_ES_2)
- builder.removeVersion();
-#endif
+ if (isES)
+ builder.removeVersion();
+
m_fragment_code = builder.source();
Q_ASSERT(!m_vertex_code.isNull());
@@ -178,14 +178,15 @@ public:
DeformableMaterial()
{
QSGShaderSourceBuilder builder;
+ const bool isES = QOpenGLContext::currentContext()->isES();
builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.vert"));
builder.addDefinition(QByteArray(SHADER_PLATFORM_DEFINES));
builder.addDefinition(QByteArrayLiteral("DEFORM"));
builder.addDefinition(QByteArrayLiteral("COLOR"));
-#if defined(QT_OPENGL_ES_2)
- builder.removeVersion();
-#endif
+ if (isES)
+ builder.removeVersion();
+
m_vertex_code = builder.source();
builder.clear();
@@ -193,9 +194,9 @@ public:
builder.addDefinition(QByteArray(SHADER_PLATFORM_DEFINES));
builder.addDefinition(QByteArrayLiteral("DEFORM"));
builder.addDefinition(QByteArrayLiteral("COLOR"));
-#if defined(QT_OPENGL_ES_2)
- builder.removeVersion();
-#endif
+ if (isES)
+ builder.removeVersion();
+
m_fragment_code = builder.source();
Q_ASSERT(!m_vertex_code.isNull());
@@ -242,6 +243,7 @@ public:
SpriteMaterial()
{
QSGShaderSourceBuilder builder;
+ const bool isES = QOpenGLContext::currentContext()->isES();
builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.vert"));
builder.addDefinition(QByteArray(SHADER_PLATFORM_DEFINES));
@@ -249,9 +251,9 @@ public:
builder.addDefinition(QByteArrayLiteral("TABLE"));
builder.addDefinition(QByteArrayLiteral("DEFORM"));
builder.addDefinition(QByteArrayLiteral("COLOR"));
-#if defined(QT_OPENGL_ES_2)
- builder.removeVersion();
-#endif
+ if (isES)
+ builder.removeVersion();
+
m_vertex_code = builder.source();
builder.clear();
@@ -261,9 +263,9 @@ public:
builder.addDefinition(QByteArrayLiteral("TABLE"));
builder.addDefinition(QByteArrayLiteral("DEFORM"));
builder.addDefinition(QByteArrayLiteral("COLOR"));
-#if defined(QT_OPENGL_ES_2)
- builder.removeVersion();
-#endif
+ if (isES)
+ builder.removeVersion();
+
m_fragment_code = builder.source();
Q_ASSERT(!m_vertex_code.isNull());
@@ -323,22 +325,23 @@ public:
ColoredMaterial()
{
QSGShaderSourceBuilder builder;
+ const bool isES = QOpenGLContext::currentContext()->isES();
builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.vert"));
builder.addDefinition(QByteArray(SHADER_PLATFORM_DEFINES));
builder.addDefinition(QByteArrayLiteral("COLOR"));
-#if defined(QT_OPENGL_ES_2)
- builder.removeVersion();
-#endif
+ if (isES)
+ builder.removeVersion();
+
m_vertex_code = builder.source();
builder.clear();
builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.frag"));
builder.addDefinition(QByteArray(SHADER_PLATFORM_DEFINES));
builder.addDefinition(QByteArrayLiteral("COLOR"));
-#if defined(QT_OPENGL_ES_2)
- builder.removeVersion();
-#endif
+ if (isES)
+ builder.removeVersion();
+
m_fragment_code = builder.source();
Q_ASSERT(!m_vertex_code.isNull());
@@ -400,20 +403,21 @@ public:
SimpleMaterial()
{
QSGShaderSourceBuilder builder;
+ const bool isES = QOpenGLContext::currentContext()->isES();
builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.vert"));
builder.addDefinition(QByteArray(SHADER_PLATFORM_DEFINES));
-#if defined(QT_OPENGL_ES_2)
- builder.removeVersion();
-#endif
+ if (isES)
+ builder.removeVersion();
+
m_vertex_code = builder.source();
builder.clear();
builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.frag"));
builder.addDefinition(QByteArray(SHADER_PLATFORM_DEFINES));
-#if defined(QT_OPENGL_ES_2)
- builder.removeVersion();
-#endif
+ if (isES)
+ builder.removeVersion();
+
m_fragment_code = builder.source();
Q_ASSERT(!m_vertex_code.isNull());
@@ -1227,12 +1231,10 @@ void QQuickImageParticle::buildParticleNodes(QSGNode** passThrough)
void QQuickImageParticle::finishBuildParticleNodes(QSGNode** node)
{
-#ifdef QT_OPENGL_ES_2
- if (m_count * 4 > 0xffff) {
+ if (QOpenGLContext::currentContext()->isES() && m_count * 4 > 0xffff) {
printf("ImageParticle: Too many particles - maximum 16,000 per ImageParticle.\n");//ES 2 vertex count limit is ushort
return;
}
-#endif
if (count() <= 0)
return;