summaryrefslogtreecommitdiffstats
path: root/src/render/renderers/opengl/renderstates/renderstateset.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2017-06-02 16:19:17 +0200
committerPaul Lemire <paul.lemire@kdab.com>2018-03-19 09:06:35 +0000
commit4b83e2ee155c9ebf71e2fc46ab9abdb40bbb1061 (patch)
treef6d9074e336cce1ded818cdecd14e46c847053c3 /src/render/renderers/opengl/renderstates/renderstateset.cpp
parentab046302d593be2bfc368a321417a208d88f53ca (diff)
RenderStates: rework to split node and rendering part
The apply method was removed from GenericState and its subclasses. This allows to keep the GenericStates in the aspect part and let the renderer perform the right calls based on the state class it is provided with. Change-Id: I9c3ac04b4eb489e7443e67615e35e850c0aba07f Task-number: QTBUG-61151 Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/render/renderers/opengl/renderstates/renderstateset.cpp')
-rw-r--r--src/render/renderers/opengl/renderstates/renderstateset.cpp266
1 files changed, 0 insertions, 266 deletions
diff --git a/src/render/renderers/opengl/renderstates/renderstateset.cpp b/src/render/renderers/opengl/renderstates/renderstateset.cpp
index bf84b0e1c..f7fc279a1 100644
--- a/src/render/renderers/opengl/renderstates/renderstateset.cpp
+++ b/src/render/renderers/opengl/renderstates/renderstateset.cpp
@@ -45,50 +45,9 @@
#include <QDebug>
#include <QOpenGLContext>
-#include <Qt3DRender/private/submissioncontext_p.h>
#include <Qt3DRender/private/renderstates_p.h>
#include <Qt3DRender/private/qrenderstate_p.h>
-#include <Qt3DRender/qalphacoverage.h>
-#include <Qt3DRender/qalphatest.h>
-#include <Qt3DRender/private/qalphatest_p.h>
-#include <Qt3DRender/qblendequation.h>
-#include <Qt3DRender/private/qblendequation_p.h>
-#include <Qt3DRender/qblendequationarguments.h>
-#include <Qt3DRender/private/qblendequationarguments_p.h>
-#include <Qt3DRender/qcolormask.h>
-#include <Qt3DRender/private/qcolormask_p.h>
-#include <Qt3DRender/qcullface.h>
-#include <Qt3DRender/private/qcullface_p.h>
-#include <Qt3DRender/qnodepthmask.h>
-#include <Qt3DRender/qdepthtest.h>
-#include <Qt3DRender/private/qdepthtest_p.h>
-#include <Qt3DRender/qdithering.h>
-#include <Qt3DRender/qfrontface.h>
-#include <Qt3DRender/private/qfrontface_p.h>
-#include <Qt3DRender/qpointsize.h>
-#include <Qt3DRender/private/qpointsize_p.h>
-#include <Qt3DRender/qpolygonoffset.h>
-#include <Qt3DRender/private/qpolygonoffset_p.h>
-#include <Qt3DRender/qscissortest.h>
-#include <Qt3DRender/private/qscissortest_p.h>
-#include <Qt3DRender/qstenciltest.h>
-#include <Qt3DRender/private/qstenciltest_p.h>
-#include <Qt3DRender/qstenciltestarguments.h>
-#include <Qt3DRender/private/qstenciltestarguments_p.h>
-#include <Qt3DRender/qclipplane.h>
-#include <Qt3DRender/private/qclipplane_p.h>
-#include <Qt3DRender/qmultisampleantialiasing.h>
-#include <Qt3DRender/qseamlesscubemap.h>
-#include <Qt3DRender/qstenciloperation.h>
-#include <Qt3DRender/private/qstenciloperation_p.h>
-#include <Qt3DRender/qstenciloperationarguments.h>
-#include <Qt3DRender/private/qstenciloperationarguments_p.h>
-#include <Qt3DRender/qstencilmask.h>
-#include <Qt3DRender/private/qstencilmask_p.h>
-#include <Qt3DRender/qlinewidth.h>
-#include <Qt3DRender/private/qlinewidth_p.h>
-
QT_BEGIN_NAMESPACE
namespace Qt3DRender {
@@ -139,33 +98,6 @@ int RenderStateSet::changeCost(RenderStateSet *previousState)
return cost;
}
-void RenderStateSet::apply(SubmissionContext *gc)
-{
- RenderStateSet* previousStates = gc->currentStateSet();
-
- const StateMaskSet invOurState = ~stateMask();
- // generate a mask for each set bit in previous, where we do not have
- // the corresponding bit set.
-
- StateMaskSet stateToReset = 0;
- if (previousStates) {
- stateToReset = previousStates->stateMask() & invOurState;
- qCDebug(RenderStates) << "previous states " << QString::number(previousStates->stateMask(), 2);
- }
- qCDebug(RenderStates) << " current states " << QString::number(stateMask(), 2) << "inverse " << QString::number(invOurState, 2) << " -> states to change: " << QString::number(stateToReset, 2);
-
- // Reset states that aren't active in the current state set
- resetMasked(stateToReset, gc);
-
- // Apply states that weren't in the previous state or that have
- // different values
- for (const StateVariant &ds : qAsConst(m_states)) {
- if (previousStates && previousStates->contains(ds))
- continue;
- ds.apply(gc);
- }
-}
-
StateMaskSet RenderStateSet::stateMask() const
{
return m_stateMask;
@@ -176,67 +108,6 @@ void RenderStateSet::merge(RenderStateSet *other)
m_stateMask |= other->stateMask();
}
-void RenderStateSet::resetMasked(StateMaskSet maskOfStatesToReset, SubmissionContext *gc)
-{
- // TO DO -> Call gcHelper methods instead of raw GL
- // QOpenGLFunctions shouldn't be used here directly
- QOpenGLFunctions *funcs = gc->openGLContext()->functions();
-
- if (maskOfStatesToReset & ScissorStateMask)
- funcs->glDisable(GL_SCISSOR_TEST);
-
- if (maskOfStatesToReset & BlendStateMask)
- funcs->glDisable(GL_BLEND);
-
- if (maskOfStatesToReset & StencilWriteStateMask)
- funcs->glStencilMask(0);
-
- if (maskOfStatesToReset & StencilTestStateMask)
- funcs->glDisable(GL_STENCIL_TEST);
-
- if (maskOfStatesToReset & DepthTestStateMask)
- funcs->glDisable(GL_DEPTH_TEST);
-
- if (maskOfStatesToReset & DepthWriteStateMask)
- funcs->glDepthMask(GL_TRUE); // reset to default
-
- if (maskOfStatesToReset & FrontFaceStateMask)
- funcs->glFrontFace(GL_CCW); // reset to default
-
- if (maskOfStatesToReset & CullFaceStateMask)
- funcs->glDisable(GL_CULL_FACE);
-
- if (maskOfStatesToReset & DitheringStateMask)
- funcs->glDisable(GL_DITHER);
-
- if (maskOfStatesToReset & AlphaCoverageStateMask)
- gc->setAlphaCoverageEnabled(false);
-
- if (maskOfStatesToReset & PointSizeMask)
- gc->pointSize(false, 1.0f); // reset to default
-
- if (maskOfStatesToReset & PolygonOffsetStateMask)
- funcs->glDisable(GL_POLYGON_OFFSET_FILL);
-
- if (maskOfStatesToReset & ColorStateMask)
- funcs->glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
-
- if (maskOfStatesToReset & ClipPlaneMask) {
- GLint max = gc->maxClipPlaneCount();
- for (GLint i = 0; i < max; ++i)
- gc->disableClipPlane(i);
- }
-
- if (maskOfStatesToReset & SeamlessCubemapMask)
- gc->setSeamlessCubemap(false);
-
- if (maskOfStatesToReset & StencilOpMask)
- funcs->glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
-
- if (maskOfStatesToReset & LineWidthMask)
- funcs->glLineWidth(1.0f);
-}
-
bool RenderStateSet::contains(const StateVariant &ds) const
{
// trivial reject using the state mask bits
@@ -250,143 +121,6 @@ bool RenderStateSet::contains(const StateVariant &ds) const
return false;
}
-StateVariant RenderStateSet::initializeStateFromPeer(const Qt3DRender::QRenderStateCreatedChangeBasePtr change)
-{
- switch (change->renderStateType()) {
- case AlphaCoverageStateMask: {
- return RenderStateSet::createState<AlphaCoverage>();
- }
-
- case AlphaTestMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QAlphaTestData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<AlphaFunc>(data.alphaFunction, data.referenceValue);
- }
-
- case BlendStateMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QBlendEquationData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<BlendEquation>(data.blendFunction);
- }
-
- case BlendEquationArgumentsMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QBlendEquationArgumentsData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<BlendEquationArguments>(
- data.sourceRgb, data.destinationRgb,
- data.sourceAlpha, data.destinationAlpha,
- change->isNodeEnabled(),
- data.bufferIndex);
- }
-
- case MSAAEnabledStateMask: {
- return RenderStateSet::createState<MSAAEnabled>(change->isNodeEnabled());
- }
-
- case CullFaceStateMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QCullFaceData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<CullFace>(data.mode);
- }
-
- case DepthWriteStateMask: {
- return RenderStateSet::createState<NoDepthMask>(false);
- }
-
- case DepthTestStateMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QDepthTestData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<DepthTest>(data.depthFunction);
- }
-
- case FrontFaceStateMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QFrontFaceData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<FrontFace>(data.direction);
- }
-
- case ScissorStateMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QScissorTestData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<ScissorTest>(data.left, data.bottom,
- data.width, data.height);
- }
-
- case StencilTestStateMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QStencilTestData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<StencilTest>(data.front.stencilFunction,
- data.front.referenceValue,
- data.front.comparisonMask,
- data.back.stencilFunction,
- data.back.referenceValue,
- data.back.comparisonMask);
- }
-
- case PointSizeMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QPointSizeData>>(change);
- const auto &data = typedChange->data;
- const bool isProgrammable = (data.sizeMode == QPointSize::Programmable);
- return RenderStateSet::createState<PointSize>(isProgrammable, data.value);
- }
-
- case PolygonOffsetStateMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QPolygonOffsetData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<PolygonOffset>(data.scaleFactor, data.depthSteps);
- }
-
- case ColorStateMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QColorMaskData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<ColorMask>(data.redMasked, data.greenMasked,
- data.blueMasked, data.alphaMasked);
- }
-
- case ClipPlaneMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QClipPlaneData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<ClipPlane>(data.planeIndex,
- data.normal,
- data.distance);
- }
-
- case SeamlessCubemapMask: {
- return RenderStateSet::createState<SeamlessCubemap>();
- }
-
- case StencilOpMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QStencilOperationData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<StencilOp>(data.front.stencilTestFailureOperation,
- data.front.depthTestFailureOperation,
- data.front.allTestsPassOperation,
- data.back.stencilTestFailureOperation,
- data.back.depthTestFailureOperation,
- data.back.allTestsPassOperation);
- }
-
- case StencilWriteStateMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QStencilMaskData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<StencilMask>(data.frontOutputMask,
- data.backOutputMask);
- }
-
- case LineWidthMask: {
- const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QLineWidthData>>(change);
- const auto &data = typedChange->data;
- return RenderStateSet::createState<LineWidth>(data.value, data.smooth);
- }
-
- // TODO: Fix Dithering state
- case DitheringStateMask:
- default:
- Q_UNREACHABLE();
- return StateVariant();
- }
-}
-
} // namespace Render
} // namespace Qt3DRender