aboutsummaryrefslogtreecommitdiffstats
path: root/src/particles
diff options
context:
space:
mode:
Diffstat (limited to 'src/particles')
-rw-r--r--src/particles/CMakeLists.txt4
-rw-r--r--src/particles/particles.qrc5
-rw-r--r--src/particles/qquickimageparticle.cpp504
-rw-r--r--src/particles/shaders/imageparticle.frag42
-rw-r--r--src/particles/shaders/imageparticle.vert141
-rw-r--r--src/particles/shaders/imageparticle_core.frag44
-rw-r--r--src/particles/shaders/imageparticle_core.vert141
7 files changed, 19 insertions, 862 deletions
diff --git a/src/particles/CMakeLists.txt b/src/particles/CMakeLists.txt
index 085b4d27f1..c0c72578bd 100644
--- a/src/particles/CMakeLists.txt
+++ b/src/particles/CMakeLists.txt
@@ -64,10 +64,6 @@ qt_add_resource(QuickParticles "particles"
${particles_resource_files}
)
set(particles1_resource_files
- "shaders/imageparticle.frag"
- "shaders/imageparticle.vert"
- "shaders/imageparticle_core.frag"
- "shaders/imageparticle_core.vert"
"shaders_ng/imageparticle_colored.frag.qsb"
"shaders_ng/imageparticle_colored.vert.qsb"
"shaders_ng/imageparticle_deformed.frag.qsb"
diff --git a/src/particles/particles.qrc b/src/particles/particles.qrc
index 7727691233..5e76563842 100644
--- a/src/particles/particles.qrc
+++ b/src/particles/particles.qrc
@@ -6,11 +6,6 @@
<file>particleresources/star.png</file>
</qresource>
<qresource prefix="/particles">
- <file>shaders/imageparticle.frag</file>
- <file>shaders/imageparticle.vert</file>
- <file>shaders/imageparticle_core.frag</file>
- <file>shaders/imageparticle_core.vert</file>
-
<file>shaders_ng/imageparticle_simple.vert.qsb</file>
<file>shaders_ng/imageparticle_simple.frag.qsb</file>
<file>shaders_ng/imageparticle_tabled.vert.qsb</file>
diff --git a/src/particles/qquickimageparticle.cpp b/src/particles/qquickimageparticle.cpp
index f2e3715061..d33db8de76 100644
--- a/src/particles/qquickimageparticle.cpp
+++ b/src/particles/qquickimageparticle.cpp
@@ -48,7 +48,6 @@
#include "qquickparticleemitter_p.h"
#include <private/qquicksprite_p.h>
#include <private/qquickspriteengine_p.h>
-#include <QOpenGLFunctions>
#include <QSGRendererInterface>
#include <QtQuick/private/qsgshadersourcebuilder_p.h>
#include <QtQuick/private/qsgplaintexture_p.h>
@@ -86,91 +85,7 @@ class ImageMaterialData
QSizeF animSheetSize;
};
-class TabledMaterialShader : public QSGMaterialShader
-{
-public:
- TabledMaterialShader()
- {
- QSGShaderSourceBuilder builder;
- const bool isES = QOpenGLContext::currentContext()->isOpenGLES();
-
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.vert"));
- builder.addDefinition(QByteArrayLiteral("TABLE"));
- builder.addDefinition(QByteArrayLiteral("DEFORM"));
- builder.addDefinition(QByteArrayLiteral("COLOR"));
- if (isES)
- builder.removeVersion();
-
- m_vertex_code = builder.source();
- builder.clear();
-
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.frag"));
- builder.addDefinition(QByteArrayLiteral("TABLE"));
- builder.addDefinition(QByteArrayLiteral("DEFORM"));
- builder.addDefinition(QByteArrayLiteral("COLOR"));
- if (isES)
- builder.removeVersion();
-
- m_fragment_code = builder.source();
-
- Q_ASSERT(!m_vertex_code.isNull());
- Q_ASSERT(!m_fragment_code.isNull());
- }
-
- const char *vertexShader() const override { return m_vertex_code.constData(); }
- const char *fragmentShader() const override { return m_fragment_code.constData(); }
-
- char const *const *attributeNames() const override
- {
- static const char *const attr[] = { "vPosTex", "vData", "vVec", "vColor", "vDeformVec", "vRotation", nullptr };
- return attr;
- }
-
- void initialize() override {
- program()->bind();
- program()->setUniformValue("_qt_texture", 0);
- program()->setUniformValue("colortable", 1);
- glFuncs = QOpenGLContext::currentContext()->functions();
- m_matrix_id = program()->uniformLocation("qt_Matrix");
- m_opacity_id = program()->uniformLocation("qt_Opacity");
- m_timestamp_id = program()->uniformLocation("timestamp");
- m_entry_id = program()->uniformLocation("entry");
- m_sizetable_id = program()->uniformLocation("sizetable");
- m_opacitytable_id = program()->uniformLocation("opacitytable");
- }
-
- void updateState(const RenderState &renderState, QSGMaterial *mat, QSGMaterial *) override {
- ImageMaterialData *state = static_cast<ImageMaterial *>(mat)->state();
-
- if (renderState.isMatrixDirty())
- program()->setUniformValue(m_matrix_id, renderState.combinedMatrix());
- if (renderState.isOpacityDirty() && m_opacity_id >= 0)
- program()->setUniformValue(m_opacity_id, renderState.opacity());
-
- glFuncs->glActiveTexture(GL_TEXTURE1);
- state->colorTable->bind();
-
- glFuncs->glActiveTexture(GL_TEXTURE0);
- state->texture->bind();
-
- program()->setUniformValue(m_timestamp_id, (float) state->timestamp);
- program()->setUniformValue(m_entry_id, (float) state->entry);
- program()->setUniformValueArray(m_sizetable_id, (const float*) state->sizeTable, UNIFORM_ARRAY_SIZE, 1);
- program()->setUniformValueArray(m_opacitytable_id, (const float*) state->opacityTable, UNIFORM_ARRAY_SIZE, 1);
- }
-
- int m_matrix_id;
- int m_opacity_id;
- int m_entry_id;
- int m_timestamp_id;
- int m_sizetable_id;
- int m_opacitytable_id;
- QByteArray m_vertex_code;
- QByteArray m_fragment_code;
- QOpenGLFunctions* glFuncs;
-};
-
-class TabledMaterialRhiShader : public QSGMaterialRhiShader
+class TabledMaterialRhiShader : public QSGMaterialShader
{
public:
TabledMaterialRhiShader()
@@ -233,12 +148,8 @@ public:
class TabledMaterial : public ImageMaterial
{
public:
- TabledMaterial() { setFlag(SupportsRhiShader, true); }
QSGMaterialShader *createShader() const override {
- if (flags().testFlag(RhiShaderWanted))
- return new TabledMaterialRhiShader;
- else
- return new TabledMaterialShader;
+ return new TabledMaterialRhiShader;
}
QSGMaterialType *type() const override { return &m_type; }
@@ -251,78 +162,7 @@ private:
QSGMaterialType TabledMaterial::m_type;
-class DeformableMaterialShader : public QSGMaterialShader
-{
-public:
- DeformableMaterialShader()
- {
- QSGShaderSourceBuilder builder;
- const bool isES = QOpenGLContext::currentContext()->isOpenGLES();
-
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.vert"));
- builder.addDefinition(QByteArrayLiteral("DEFORM"));
- builder.addDefinition(QByteArrayLiteral("COLOR"));
- if (isES)
- builder.removeVersion();
-
- m_vertex_code = builder.source();
- builder.clear();
-
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.frag"));
- builder.addDefinition(QByteArrayLiteral("DEFORM"));
- builder.addDefinition(QByteArrayLiteral("COLOR"));
- if (isES)
- builder.removeVersion();
-
- m_fragment_code = builder.source();
-
- Q_ASSERT(!m_vertex_code.isNull());
- Q_ASSERT(!m_fragment_code.isNull());
- }
-
- const char *vertexShader() const override { return m_vertex_code.constData(); }
- const char *fragmentShader() const override { return m_fragment_code.constData(); }
-
- char const *const *attributeNames() const override
- {
- static const char *const attr[] = { "vPosTex", "vData", "vVec", "vColor", "vDeformVec", "vRotation", nullptr };
- return attr;
- }
-
- void initialize() override {
- program()->bind();
- program()->setUniformValue("_qt_texture", 0);
- glFuncs = QOpenGLContext::currentContext()->functions();
- m_matrix_id = program()->uniformLocation("qt_Matrix");
- m_opacity_id = program()->uniformLocation("qt_Opacity");
- m_timestamp_id = program()->uniformLocation("timestamp");
- m_entry_id = program()->uniformLocation("entry");
- }
-
- void updateState(const RenderState &renderState, QSGMaterial *mat, QSGMaterial *) override {
- ImageMaterialData *state = static_cast<ImageMaterial *>(mat)->state();
-
- if (renderState.isMatrixDirty())
- program()->setUniformValue(m_matrix_id, renderState.combinedMatrix());
- if (renderState.isOpacityDirty() && m_opacity_id >= 0)
- program()->setUniformValue(m_opacity_id, renderState.opacity());
-
- state->texture->bind();
-
- program()->setUniformValue(m_timestamp_id, (float) state->timestamp);
- program()->setUniformValue(m_entry_id, (float) state->entry);
- }
-
- int m_matrix_id;
- int m_opacity_id;
- int m_entry_id;
- int m_timestamp_id;
- QByteArray m_vertex_code;
- QByteArray m_fragment_code;
- QOpenGLFunctions* glFuncs;
-};
-
-class DeformableMaterialRhiShader : public QSGMaterialRhiShader
+class DeformableMaterialRhiShader : public QSGMaterialShader
{
public:
DeformableMaterialRhiShader()
@@ -371,12 +211,8 @@ public:
class DeformableMaterial : public ImageMaterial
{
public:
- DeformableMaterial() { setFlag(SupportsRhiShader, true); }
QSGMaterialShader *createShader() const override {
- if (flags().testFlag(RhiShaderWanted))
- return new DeformableMaterialRhiShader;
- else
- return new DeformableMaterialShader;
+ return new DeformableMaterialRhiShader;
}
QSGMaterialType *type() const override { return &m_type; }
@@ -389,96 +225,7 @@ private:
QSGMaterialType DeformableMaterial::m_type;
-class ParticleSpriteMaterialShader : public QSGMaterialShader
-{
-public:
- ParticleSpriteMaterialShader()
- {
- QSGShaderSourceBuilder builder;
- const bool isES = QOpenGLContext::currentContext()->isOpenGLES();
-
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.vert"));
- builder.addDefinition(QByteArrayLiteral("SPRITE"));
- builder.addDefinition(QByteArrayLiteral("TABLE"));
- builder.addDefinition(QByteArrayLiteral("DEFORM"));
- builder.addDefinition(QByteArrayLiteral("COLOR"));
- if (isES)
- builder.removeVersion();
-
- m_vertex_code = builder.source();
- builder.clear();
-
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.frag"));
- builder.addDefinition(QByteArrayLiteral("SPRITE"));
- builder.addDefinition(QByteArrayLiteral("TABLE"));
- builder.addDefinition(QByteArrayLiteral("DEFORM"));
- builder.addDefinition(QByteArrayLiteral("COLOR"));
- if (isES)
- builder.removeVersion();
-
- m_fragment_code = builder.source();
-
- Q_ASSERT(!m_vertex_code.isNull());
- Q_ASSERT(!m_fragment_code.isNull());
- }
-
- const char *vertexShader() const override { return m_vertex_code.constData(); }
- const char *fragmentShader() const override { return m_fragment_code.constData(); }
-
- char const *const *attributeNames() const override
- {
- static const char *const attr[] = { "vPosTex", "vData", "vVec", "vColor", "vDeformVec", "vRotation",
- "vAnimData", "vAnimPos", nullptr };
- return attr;
- }
-
- void initialize() override {
- program()->bind();
- program()->setUniformValue("_qt_texture", 0);
- program()->setUniformValue("colortable", 1);
- glFuncs = QOpenGLContext::currentContext()->functions();
- m_matrix_id = program()->uniformLocation("qt_Matrix");
- m_opacity_id = program()->uniformLocation("qt_Opacity");
- //Don't actually expose the animSheetSize in the shader, it's currently only used for CPU calculations.
- m_timestamp_id = program()->uniformLocation("timestamp");
- m_entry_id = program()->uniformLocation("entry");
- m_sizetable_id = program()->uniformLocation("sizetable");
- m_opacitytable_id = program()->uniformLocation("opacitytable");
- }
-
- void updateState(const RenderState &renderState, QSGMaterial *mat, QSGMaterial *) override {
- ImageMaterialData *state = static_cast<ImageMaterial *>(mat)->state();
-
- if (renderState.isMatrixDirty())
- program()->setUniformValue(m_matrix_id, renderState.combinedMatrix());
- if (renderState.isOpacityDirty() && m_opacity_id >= 0)
- program()->setUniformValue(m_opacity_id, renderState.opacity());
-
- glFuncs->glActiveTexture(GL_TEXTURE1);
- state->colorTable->bind();
-
- // make sure we end by setting GL_TEXTURE0 as active texture
- glFuncs->glActiveTexture(GL_TEXTURE0);
- state->texture->bind();
-
- program()->setUniformValue(m_timestamp_id, (float) state->timestamp);
- program()->setUniformValue(m_entry_id, (float) state->entry);
- program()->setUniformValueArray(m_sizetable_id, (const float*) state->sizeTable, 64, 1);
- program()->setUniformValueArray(m_opacitytable_id, (const float*) state->opacityTable, UNIFORM_ARRAY_SIZE, 1);
- }
-
- int m_matrix_id;
- int m_opacity_id;
- int m_timestamp_id;
- int m_entry_id;
- int m_sizetable_id;
- int m_opacitytable_id;
- QByteArray m_vertex_code;
- QByteArray m_fragment_code;
- QOpenGLFunctions* glFuncs;
-};
-
-class ParticleSpriteMaterialRhiShader : public QSGMaterialRhiShader
+class ParticleSpriteMaterialRhiShader : public QSGMaterialShader
{
public:
ParticleSpriteMaterialRhiShader()
@@ -541,12 +288,8 @@ public:
class SpriteMaterial : public ImageMaterial
{
public:
- SpriteMaterial() { setFlag(SupportsRhiShader, true); }
QSGMaterialShader *createShader() const override {
- if (flags().testFlag(RhiShaderWanted))
- return new ParticleSpriteMaterialRhiShader;
- else
- return new ParticleSpriteMaterialShader;
+ return new ParticleSpriteMaterialRhiShader;
}
QSGMaterialType *type() const override { return &m_type; }
@@ -559,90 +302,7 @@ private:
QSGMaterialType SpriteMaterial::m_type;
-class ColoredMaterialShader : public QSGMaterialShader
-{
-public:
- ColoredMaterialShader()
- {
- QSGShaderSourceBuilder builder;
- const bool isES = QOpenGLContext::currentContext()->isOpenGLES();
-
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.vert"));
- builder.addDefinition(QByteArrayLiteral("COLOR"));
- if (isES)
- builder.removeVersion();
-
- m_vertex_code = builder.source();
- builder.clear();
-
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.frag"));
- builder.addDefinition(QByteArrayLiteral("COLOR"));
- if (isES)
- builder.removeVersion();
-
- m_fragment_code = builder.source();
-
- Q_ASSERT(!m_vertex_code.isNull());
- Q_ASSERT(!m_fragment_code.isNull());
- }
-
- const char *vertexShader() const override { return m_vertex_code.constData(); }
- const char *fragmentShader() const override { return m_fragment_code.constData(); }
-
- char const *const *attributeNames() const override
- {
- static const char *const attr[] = { "vPos", "vData", "vVec", "vColor", nullptr };
- return attr;
- }
-
- void initialize() override {
- program()->bind();
- program()->setUniformValue("_qt_texture", 0);
- glFuncs = QOpenGLContext::currentContext()->functions();
- m_matrix_id = program()->uniformLocation("qt_Matrix");
- m_opacity_id = program()->uniformLocation("qt_Opacity");
- m_timestamp_id = program()->uniformLocation("timestamp");
- m_entry_id = program()->uniformLocation("entry");
- }
-
- void activate() override {
-#if !QT_CONFIG(opengles2) && !defined(Q_OS_WIN)
- glEnable(GL_POINT_SPRITE);
- glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
-#endif
- }
-
- void deactivate() override {
-#if !QT_CONFIG(opengles2) && !defined(Q_OS_WIN)
- glDisable(GL_POINT_SPRITE);
- glDisable(GL_VERTEX_PROGRAM_POINT_SIZE);
-#endif
- }
-
- void updateState(const RenderState &renderState, QSGMaterial *mat, QSGMaterial *) override {
- ImageMaterialData *state = static_cast<ImageMaterial *>(mat)->state();
-
- if (renderState.isMatrixDirty())
- program()->setUniformValue(m_matrix_id, renderState.combinedMatrix());
- if (renderState.isOpacityDirty() && m_opacity_id >= 0)
- program()->setUniformValue(m_opacity_id, renderState.opacity());
-
- state->texture->bind();
-
- program()->setUniformValue(m_timestamp_id, (float) state->timestamp);
- program()->setUniformValue(m_entry_id, (float) state->entry);
- }
-
- int m_matrix_id;
- int m_opacity_id;
- int m_timestamp_id;
- int m_entry_id;
- QByteArray m_vertex_code;
- QByteArray m_fragment_code;
- QOpenGLFunctions* glFuncs;
-};
-
-class ColoredMaterialRhiShader : public QSGMaterialRhiShader
+class ColoredMaterialRhiShader : public QSGMaterialShader
{
public:
ColoredMaterialRhiShader()
@@ -691,12 +351,8 @@ public:
class ColoredMaterial : public ImageMaterial
{
public:
- ColoredMaterial() { setFlag(SupportsRhiShader, true); }
QSGMaterialShader *createShader() const override {
- if (flags().testFlag(RhiShaderWanted))
- return new ColoredMaterialRhiShader;
- else
- return new ColoredMaterialShader;
+ return new ColoredMaterialRhiShader;
}
QSGMaterialType *type() const override { return &m_type; }
@@ -709,88 +365,7 @@ private:
QSGMaterialType ColoredMaterial::m_type;
-class SimpleMaterialShader : public QSGMaterialShader
-{
-public:
- SimpleMaterialShader()
- {
- QSGShaderSourceBuilder builder;
- const bool isES = QOpenGLContext::currentContext()->isOpenGLES();
-
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.vert"));
- if (isES)
- builder.removeVersion();
-
- m_vertex_code = builder.source();
- builder.clear();
-
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/imageparticle.frag"));
- if (isES)
- builder.removeVersion();
-
- m_fragment_code = builder.source();
-
- Q_ASSERT(!m_vertex_code.isNull());
- Q_ASSERT(!m_fragment_code.isNull());
- }
-
- const char *vertexShader() const override { return m_vertex_code.constData(); }
- const char *fragmentShader() const override { return m_fragment_code.constData(); }
-
- char const *const *attributeNames() const override
- {
- static const char *const attr[] = { "vPos", "vData", "vVec", nullptr };
- return attr;
- }
-
- void initialize() override {
- program()->bind();
- program()->setUniformValue("_qt_texture", 0);
- glFuncs = QOpenGLContext::currentContext()->functions();
- m_matrix_id = program()->uniformLocation("qt_Matrix");
- m_opacity_id = program()->uniformLocation("qt_Opacity");
- m_timestamp_id = program()->uniformLocation("timestamp");
- m_entry_id = program()->uniformLocation("entry");
- }
-
- void activate() override {
-#if !QT_CONFIG(opengles2) && !defined(Q_OS_WIN)
- glEnable(GL_POINT_SPRITE);
- glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
-#endif
- }
-
- void deactivate() override {
-#if !QT_CONFIG(opengles2) && !defined(Q_OS_WIN)
- glDisable(GL_POINT_SPRITE);
- glDisable(GL_VERTEX_PROGRAM_POINT_SIZE);
-#endif
- }
-
- void updateState(const RenderState &renderState, QSGMaterial *mat, QSGMaterial *) override {
- ImageMaterialData *state = static_cast<ImageMaterial *>(mat)->state();
-
- if (renderState.isMatrixDirty())
- program()->setUniformValue(m_matrix_id, renderState.combinedMatrix());
- if (renderState.isOpacityDirty() && m_opacity_id >= 0)
- program()->setUniformValue(m_opacity_id, renderState.opacity());
-
- state->texture->bind();
-
- program()->setUniformValue(m_timestamp_id, (float) state->timestamp);
- program()->setUniformValue(m_entry_id, (float) state->entry);
- }
-
- int m_matrix_id;
- int m_opacity_id;
- int m_timestamp_id;
- int m_entry_id;
- QByteArray m_vertex_code;
- QByteArray m_fragment_code;
- QOpenGLFunctions* glFuncs;
-};
-
-class SimpleMaterialRhiShader : public QSGMaterialRhiShader
+class SimpleMaterialRhiShader : public QSGMaterialShader
{
public:
SimpleMaterialRhiShader()
@@ -839,12 +414,8 @@ public:
class SimpleMaterial : public ImageMaterial
{
public:
- SimpleMaterial() { setFlag(SupportsRhiShader, true); }
QSGMaterialShader *createShader() const override {
- if (flags().testFlag(RhiShaderWanted))
- return new SimpleMaterialRhiShader;
- else
- return new SimpleMaterialShader;
+ return new SimpleMaterialRhiShader;
}
QSGMaterialType *type() const override { return &m_type; }
@@ -1634,7 +1205,7 @@ void QQuickImageParticle::buildParticleNodes(QSGNode** passThrough)
void QQuickImageParticle::finishBuildParticleNodes(QSGNode** node)
{
- if (!m_rhi && !QOpenGLContext::currentContext())
+ if (!m_rhi)
return;
if (m_count * 4 > 0xffff) {
@@ -1682,36 +1253,11 @@ void QQuickImageParticle::finishBuildParticleNodes(QSGNode** node)
}
}
- if (!m_rhi) { // the RHI may be backed by GL but these checks should be obsolete in any case
-#ifdef Q_OS_WIN
- if (perfLevel < Deformable) //QTBUG-24540 , point sprite 'extension' isn't working on windows.
- perfLevel = Deformable;
-#endif
-
-#ifdef Q_OS_MAC
- // macOS 10.8.3 introduced a bug in the AMD drivers, for at least the 2011 macbook pros,
- // causing point sprites who read gl_PointCoord in the frag shader to come out as
- // green-red blobs.
- const GLubyte *glVendor = QOpenGLContext::currentContext()->functions()->glGetString(GL_VENDOR);
- if (perfLevel < Deformable && glVendor && strstr((char *) glVendor, "ATI")) {
- perfLevel = Deformable;
- }
-#endif
-
-#ifdef Q_OS_LINUX
- // Nouveau drivers can potentially freeze a machine entirely when taking the point-sprite path.
- const GLubyte *glVendor = QOpenGLContext::currentContext()->functions()->glGetString(GL_VENDOR);
- if (perfLevel < Deformable && glVendor && strstr((const char *) glVendor, "nouveau"))
- perfLevel = Deformable;
-#endif
-
- } else {
- // Points with a size other than 1 are an optional feature with QRhi
- // because some of the underlying APIs have no support for this.
- // Therefore, avoid the point sprite path with APIs like Direct3D.
- if (perfLevel < Deformable && !m_rhi->isFeatureSupported(QRhi::VertexShaderPointSize))
- perfLevel = Deformable;
- }
+ // Points with a size other than 1 are an optional feature with QRhi
+ // because some of the underlying APIs have no support for this.
+ // Therefore, avoid the point sprite path with APIs like Direct3D.
+ if (perfLevel < Deformable && !m_rhi->isFeatureSupported(QRhi::VertexShaderPointSize))
+ perfLevel = Deformable;
if (perfLevel >= Colored && !m_color.isValid())
m_color = QColor(Qt::white);//Hidden default, but different from unset
@@ -1850,19 +1396,8 @@ void QQuickImageParticle::finishBuildParticleNodes(QSGNode** node)
node->setGeometry(g);
if (perfLevel <= Colored){
g->setDrawingMode(QSGGeometry::DrawPoints);
- if (m_debugMode) {
- if (m_rhi) {
- qDebug("Using point sprites");
- } else {
-#if QT_CONFIG(opengl)
- GLfloat pointSizeRange[2];
- QOpenGLContext::currentContext()->functions()->glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, pointSizeRange);
- qDebug() << "Using point sprites, GL_ALIASED_POINT_SIZE_RANGE " <<pointSizeRange[0] << ":" << pointSizeRange[1];
-#else
- qDebug("Using point sprites");
-#endif
- }
- }
+ if (m_debugMode)
+ qDebug("Using point sprites");
} else {
g->setDrawingMode(QSGGeometry::DrawTriangles);
}
@@ -1918,10 +1453,9 @@ QSGNode *QQuickImageParticle::updatePaintNode(QSGNode *node, UpdatePaintNodeData
return nullptr;
QSGRendererInterface::GraphicsApi api = rif->graphicsApi();
- const bool isDirectOpenGL = api == QSGRendererInterface::OpenGL;
const bool isRhi = QSGRendererInterface::isApiRhiBased(api);
- if (!node && !isDirectOpenGL && !isRhi)
+ if (!node && !isRhi)
return nullptr;
if (isRhi)
diff --git a/src/particles/shaders/imageparticle.frag b/src/particles/shaders/imageparticle.frag
deleted file mode 100644
index 92795a5381..0000000000
--- a/src/particles/shaders/imageparticle.frag
+++ /dev/null
@@ -1,42 +0,0 @@
-#version 120
-
-uniform sampler2D _qt_texture;
-uniform lowp float qt_Opacity;
-
-#if defined(SPRITE)
-varying highp vec4 fTexS;
-#elif defined(DEFORM)
-varying highp vec2 fTex;
-#endif
-
-#if defined(COLOR)
-varying lowp vec4 fColor;
-#else
-varying lowp float fFade;
-#endif
-
-#if defined(TABLE)
-varying lowp vec2 tt;
-uniform sampler2D colortable;
-#endif
-
-void main()
-{
-#if defined(SPRITE)
- gl_FragColor = mix(texture2D(_qt_texture, fTexS.xy), texture2D(_qt_texture, fTexS.zw), tt.y)
- * fColor
- * texture2D(colortable, tt)
- * qt_Opacity;
-#elif defined(TABLE)
- gl_FragColor = texture2D(_qt_texture, fTex)
- * fColor
- * texture2D(colortable, tt)
- * qt_Opacity;
-#elif defined(DEFORM)
- gl_FragColor = (texture2D(_qt_texture, fTex)) * fColor * qt_Opacity;
-#elif defined(COLOR)
- gl_FragColor = (texture2D(_qt_texture, gl_PointCoord)) * fColor * qt_Opacity;
-#else
- gl_FragColor = texture2D(_qt_texture, gl_PointCoord) * (fFade * qt_Opacity);
-#endif
-} \ No newline at end of file
diff --git a/src/particles/shaders/imageparticle.vert b/src/particles/shaders/imageparticle.vert
deleted file mode 100644
index 4057a9eb4b..0000000000
--- a/src/particles/shaders/imageparticle.vert
+++ /dev/null
@@ -1,141 +0,0 @@
-#version 120
-
-#if defined(DEFORM)
-attribute highp vec4 vPosTex;
-#else
-attribute highp vec2 vPos;
-#endif
-
-attribute highp vec4 vData; // x = time, y = lifeSpan, z = size, w = endSize
-attribute highp vec4 vVec; // x,y = constant velocity, z,w = acceleration
-uniform highp float entry;
-
-#if defined(COLOR)
-attribute highp vec4 vColor;
-#endif
-
-#if defined(DEFORM)
-attribute highp vec4 vDeformVec; // x,y x unit vector; z,w = y unit vector
-attribute highp vec3 vRotation; // x = radians of rotation, y = rotation velocity, z = bool autoRotate
-#endif
-
-#if defined(SPRITE)
-attribute highp vec3 vAnimData; // w,h(premultiplied of anim), interpolation progress
-attribute highp vec4 vAnimPos; // x,y, x,y (two frames for interpolation)
-#endif
-
-uniform highp mat4 qt_Matrix;
-uniform highp float timestamp;
-
-#if defined(TABLE)
-varying lowp vec2 tt;//y is progress if Sprite mode
-uniform highp float sizetable[64];
-uniform highp float opacitytable[64];
-#endif
-
-#if defined(SPRITE)
-varying highp vec4 fTexS;
-#elif defined(DEFORM)
-varying highp vec2 fTex;
-#endif
-
-#if defined(COLOR)
-varying lowp vec4 fColor;
-#else
-varying lowp float fFade;
-#endif
-
-
-void main()
-{
- highp float t = (timestamp - vData.x) / vData.y;
- if (t < 0. || t > 1.) {
-#if defined(DEFORM)
- gl_Position = qt_Matrix * vec4(vPosTex.x, vPosTex.y, 0., 1.);
-#else
- gl_PointSize = 0.;
-#endif
- } else {
-#if defined(SPRITE)
- tt.y = vAnimData.z;
-
- // Calculate frame location in texture
- fTexS.xy = vAnimPos.xy + vPosTex.zw * vAnimData.xy;
-
- // Next frame is also passed, for interpolation
- fTexS.zw = vAnimPos.zw + vPosTex.zw * vAnimData.xy;
-
-#elif defined(DEFORM)
- fTex = vPosTex.zw;
-#endif
- highp float currentSize = mix(vData.z, vData.w, t * t);
- lowp float fade = 1.;
- highp float fadeIn = min(t * 10., 1.);
- highp float fadeOut = 1. - clamp((t - 0.75) * 4.,0., 1.);
-
-#if defined(TABLE)
- currentSize = currentSize * sizetable[int(floor(t*64.))];
- fade = fade * opacitytable[int(floor(t*64.))];
-#endif
-
- if (entry == 1.)
- fade = fade * fadeIn * fadeOut;
- else if (entry == 2.)
- currentSize = currentSize * fadeIn * fadeOut;
-
- if (currentSize <= 0.) {
-#if defined(DEFORM)
- gl_Position = qt_Matrix * vec4(vPosTex.x, vPosTex.y, 0., 1.);
-#else
- gl_PointSize = 0.;
-#endif
- } else {
- if (currentSize < 3.) // Sizes too small look jittery as they move
- currentSize = 3.;
-
- highp vec2 pos;
-#if defined(DEFORM)
- highp float rotation = vRotation.x + vRotation.y * t * vData.y;
- if (vRotation.z == 1.0){
- highp vec2 curVel = vVec.zw * t * vData.y + vVec.xy;
- if (length(curVel) > 0.)
- rotation += atan(curVel.y, curVel.x);
- }
- highp vec2 trigCalcs = vec2(cos(rotation), sin(rotation));
- highp vec4 deform = vDeformVec * currentSize * (vPosTex.zzww - 0.5);
- highp vec4 rotatedDeform = deform.xxzz * trigCalcs.xyxy;
- rotatedDeform = rotatedDeform + (deform.yyww * trigCalcs.yxyx * vec4(-1.,1.,-1.,1.));
- /* The readable version:
- highp vec2 xDeform = vDeformVec.xy * currentSize * (vTex.x-0.5);
- highp vec2 yDeform = vDeformVec.zw * currentSize * (vTex.y-0.5);
- highp vec2 xRotatedDeform;
- xRotatedDeform.x = trigCalcs.x*xDeform.x - trigCalcs.y*xDeform.y;
- xRotatedDeform.y = trigCalcs.y*xDeform.x + trigCalcs.x*xDeform.y;
- highp vec2 yRotatedDeform;
- yRotatedDeform.x = trigCalcs.x*yDeform.x - trigCalcs.y*yDeform.y;
- yRotatedDeform.y = trigCalcs.y*yDeform.x + trigCalcs.x*yDeform.y;
- */
- pos = vPosTex.xy
- + rotatedDeform.xy
- + rotatedDeform.zw
- + vVec.xy * t * vData.y // apply velocity
- + 0.5 * vVec.zw * pow(t * vData.y, 2.); // apply acceleration
-#else
- pos = vPos
- + vVec.xy * t * vData.y // apply velocity vector..
- + 0.5 * vVec.zw * pow(t * vData.y, 2.);
- gl_PointSize = currentSize;
-#endif
- gl_Position = qt_Matrix * vec4(pos.x, pos.y, 0, 1);
-
-#if defined(COLOR)
- fColor = vColor * fade;
-#else
- fFade = fade;
-#endif
-#if defined(TABLE)
- tt.x = t;
-#endif
- }
- }
-}
diff --git a/src/particles/shaders/imageparticle_core.frag b/src/particles/shaders/imageparticle_core.frag
deleted file mode 100644
index 3ac8c8d34e..0000000000
--- a/src/particles/shaders/imageparticle_core.frag
+++ /dev/null
@@ -1,44 +0,0 @@
-#version 150 core
-
-#if defined(SPRITE)
-in vec4 fTexS;
-#elif defined(DEFORM)
-in vec2 fTex;
-#endif
-
-#if defined(COLOR)
-in vec4 fColor;
-#else
-in float fFade;
-#endif
-
-#if defined(TABLE)
-in vec2 tt;
-uniform sampler2D colortable;
-#endif
-
-out vec4 fragColor;
-
-uniform sampler2D _qt_texture;
-uniform float qt_Opacity;
-
-void main()
-{
-#if defined(SPRITE)
- fragColor = mix(texture(_qt_texture, fTexS.xy), texture(_qt_texture, fTexS.zw), tt.y)
- * fColor
- * texture(colortable, tt)
- * qt_Opacity;
-#elif defined(TABLE)
- fragColor = texture(_qt_texture, fTex)
- * fColor
- * texture(colortable, tt)
- * qt_Opacity;
-#elif defined(DEFORM)
- fragColor = texture(_qt_texture, fTex) * fColor * qt_Opacity;
-#elif defined(COLOR)
- fragColor = texture(_qt_texture, gl_PointCoord) * fColor * qt_Opacity;
-#else
- fragColor = texture(_qt_texture, gl_PointCoord) * fFade * qt_Opacity;
-#endif
-} \ No newline at end of file
diff --git a/src/particles/shaders/imageparticle_core.vert b/src/particles/shaders/imageparticle_core.vert
deleted file mode 100644
index cfa0d57dfd..0000000000
--- a/src/particles/shaders/imageparticle_core.vert
+++ /dev/null
@@ -1,141 +0,0 @@
-#version 150 core
-
-#if defined(DEFORM)
-in vec4 vPosTex;
-#else
-in vec2 vPos;
-#endif
-
-in vec4 vData; // x = time, y = lifeSpan, z = size, w = endSize
-in vec4 vVec; // x,y = constant velocity, z,w = acceleration
-uniform float entry;
-
-#if defined(COLOR)
-in vec4 vColor;
-#endif
-
-#if defined(DEFORM)
-in vec4 vDeformVec; // x,y x unit vector; z,w = y unit vector
-in vec3 vRotation; // x = radians of rotation, y = rotation velocity, z = bool autoRotate
-#endif
-
-#if defined(SPRITE)
-in vec3 vAnimData; // w,h(premultiplied of anim), interpolation progress
-in vec4 vAnimPos; // x,y, x,y (two frames for interpolation)
-#endif
-
-uniform mat4 qt_Matrix;
-uniform float timestamp;
-
-#if defined(TABLE)
-out vec2 tt;//y is progress if Sprite mode
-uniform float sizetable[64];
-uniform float opacitytable[64];
-#endif
-
-#if defined(SPRITE)
-out vec4 fTexS;
-#elif defined(DEFORM)
-out vec2 fTex;
-#endif
-
-#if defined(COLOR)
-out vec4 fColor;
-#else
-out float fFade;
-#endif
-
-
-void main()
-{
- float t = (timestamp - vData.x) / vData.y;
- if (t < 0. || t > 1.) {
-#if defined(DEFORM)
- gl_Position = qt_Matrix * vec4(vPosTex.x, vPosTex.y, 0., 1.);
-#else
- gl_PointSize = 0.;
-#endif
- } else {
-#if defined(SPRITE)
- tt.y = vAnimData.z;
-
- // Calculate frame location in texture
- fTexS.xy = vAnimPos.xy + vPosTex.zw * vAnimData.xy;
-
- // Next frame is also passed, for interpolation
- fTexS.zw = vAnimPos.zw + vPosTex.zw * vAnimData.xy;
-
-#elif defined(DEFORM)
- fTex = vPosTex.zw;
-#endif
- float currentSize = mix(vData.z, vData.w, t * t);
- float fade = 1.;
- float fadeIn = min(t * 10., 1.);
- float fadeOut = 1. - clamp((t - 0.75) * 4.,0., 1.);
-
-#if defined(TABLE)
- currentSize = currentSize * sizetable[int(floor(t*64.))];
- fade = fade * opacitytable[int(floor(t*64.))];
-#endif
-
- if (entry == 1.)
- fade = fade * fadeIn * fadeOut;
- else if (entry == 2.)
- currentSize = currentSize * fadeIn * fadeOut;
-
- if (currentSize <= 0.) {
-#if defined(DEFORM)
- gl_Position = qt_Matrix * vec4(vPosTex.x, vPosTex.y, 0., 1.);
-#else
- gl_PointSize = 0.;
-#endif
- } else {
- if (currentSize < 3.) // Sizes too small look jittery as they move
- currentSize = 3.;
-
- vec2 pos;
-#if defined(DEFORM)
- float rotation = vRotation.x + vRotation.y * t * vData.y;
- if (vRotation.z == 1.0) {
- vec2 curVel = vVec.zw * t * vData.y + vVec.xy;
- if (length(curVel) > 0.)
- rotation += atan(curVel.y, curVel.x);
- }
- vec2 trigCalcs = vec2(cos(rotation), sin(rotation));
- vec4 deform = vDeformVec * currentSize * (vPosTex.zzww - 0.5);
- vec4 rotatedDeform = deform.xxzz * trigCalcs.xyxy;
- rotatedDeform = rotatedDeform + (deform.yyww * trigCalcs.yxyx * vec4(-1.,1.,-1.,1.));
- /* The readable version:
- vec2 xDeform = vDeformVec.xy * currentSize * (vTex.x-0.5);
- vec2 yDeform = vDeformVec.zw * currentSize * (vTex.y-0.5);
- vec2 xRotatedDeform;
- xRotatedDeform.x = trigCalcs.x*xDeform.x - trigCalcs.y*xDeform.y;
- xRotatedDeform.y = trigCalcs.y*xDeform.x + trigCalcs.x*xDeform.y;
- vec2 yRotatedDeform;
- yRotatedDeform.x = trigCalcs.x*yDeform.x - trigCalcs.y*yDeform.y;
- yRotatedDeform.y = trigCalcs.y*yDeform.x + trigCalcs.x*yDeform.y;
- */
- pos = vPosTex.xy
- + rotatedDeform.xy
- + rotatedDeform.zw
- + vVec.xy * t * vData.y // apply velocity
- + 0.5 * vVec.zw * pow(t * vData.y, 2.); // apply acceleration
-#else
- pos = vPos
- + vVec.xy * t * vData.y // apply velocity vector..
- + 0.5 * vVec.zw * pow(t * vData.y, 2.);
- gl_PointSize = currentSize;
-#endif
- gl_Position = qt_Matrix * vec4(pos.x, pos.y, 0, 1);
-
-#if defined(COLOR)
- fColor = vColor * fade;
-#else
- fFade = fade;
-#endif
-#if defined(TABLE)
- tt.x = t;
-#endif
- }
- }
-}