summaryrefslogtreecommitdiffstats
path: root/src/render/renderstates/qblendstate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/renderstates/qblendstate.cpp')
-rw-r--r--src/render/renderstates/qblendstate.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/render/renderstates/qblendstate.cpp b/src/render/renderstates/qblendstate.cpp
index 0a27c5b35..a92409118 100644
--- a/src/render/renderstates/qblendstate.cpp
+++ b/src/render/renderstates/qblendstate.cpp
@@ -53,6 +53,8 @@ public:
, m_srcAlpha(QBlendState::Zero)
, m_dstRGB(QBlendState::Zero)
, m_dstAlpha(QBlendState::Zero)
+ , m_enabled(true)
+ , m_bufferIndex(-1)
{
}
@@ -62,6 +64,8 @@ public:
QBlendState::Blending m_srcAlpha;
QBlendState::Blending m_dstRGB;
QBlendState::Blending m_dstAlpha;
+ bool m_enabled;
+ int m_bufferIndex;
};
/*!
@@ -69,6 +73,14 @@ public:
\inmodule Qt3DRender
\since 5.5
\brief Encapsulates blending information.
+
+ OpenGL pre-3.0: Set the same blend state for all draw buffers
+ (one QBlendState)
+ OpenGL 3.0-pre4.0: Set the same blend state for all draw buffers,
+ but can disable blending for particular buffers
+ (one QBlendState for setting glBlendFunc, n QBlendStates
+ for enabling/disabling Draw Buffers)
+ OpenGL 4.0+: Can set blend state individually for each draw buffer.
*/
/*!
@@ -78,6 +90,11 @@ public:
\inqmlmodule Qt3D.Render
\since 5.5
\brief Encapsulates blending information.
+
+ OpenGL pre-3.0: Set the same blend state for all draw buffers
+ OpenGL 3.0-pre4.0: Set the same blend state for all draw buffers,
+ but can disable blending for particular buffers
+ OpenGL 4.0+: Can set blend state individually for each draw buffer.
*/
/*!
@@ -105,6 +122,8 @@ void QBlendState::copy(const QNode *ref)
d_func()->m_srcAlpha = refState->d_func()->m_srcAlpha;
d_func()->m_dstAlpha = refState->d_func()->m_dstAlpha;
d_func()->m_dstRGB = refState->d_func()->m_dstRGB;
+ d_func()->m_enabled = refState->d_func()->m_enabled;
+ d_func()->m_bufferIndex = refState->d_func()->m_bufferIndex;
}
/*!
@@ -235,6 +254,61 @@ void QBlendState::setDstAlpha(QBlendState::Blending dstAlpha)
}
}
+bool QBlendState::enabled() const
+{
+ Q_D(const QBlendState);
+ return d->m_enabled;
+}
+
+void QBlendState::setEnabled(bool enabled)
+{
+ Q_D(QBlendState);
+ if (d->m_enabled != enabled) {
+ d->m_enabled = enabled;
+ emit enabledChanged(enabled);
+ }
+}
+
+/*!
+ \qmlproperty int Qt3D.Render::BlendState::bufferIndex
+
+ Specifies the index of the Draw Buffer that this BlendState applies to.
+ If negative, this will apply to all Draw Buffers.
+ */
+
+/*!
+ \property Qt3DRender::QBlendState::bufferIndex
+
+ Specifies the index of the Draw Buffer that this BlendState applies to.
+ If negative, this will apply to all Draw Buffers.
+ */
+int QBlendState::bufferIndex() const
+{
+ Q_D(const QBlendState);
+ return d->m_bufferIndex;
+}
+
+void QBlendState::setBufferIndex(int bufferIndex)
+{
+ Q_D(QBlendState);
+ if (d->m_bufferIndex != bufferIndex) {
+ bool oldAllBuffers = (d->m_bufferIndex < 0);
+ bool newAllBuffers = (bufferIndex < 0);
+
+ d->m_bufferIndex = bufferIndex;
+ emit bufferIndexChanged(bufferIndex);
+
+ if (oldAllBuffers != newAllBuffers)
+ emit specifiesAllDrawBuffersChanged(newAllBuffers);
+ }
+}
+
+bool QBlendState::specifiesAllDrawBuffers() const
+{
+ Q_D(const QBlendState);
+ return (d->m_bufferIndex < 0);
+}
+
/*!
\class Qt3DRender::QBlendStateSeparate
\inmodule Qt3DRender