diff options
Diffstat (limited to 'src/quick3d/imports/scene3d/scene3dsgmaterialshader.cpp')
-rw-r--r-- | src/quick3d/imports/scene3d/scene3dsgmaterialshader.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/quick3d/imports/scene3d/scene3dsgmaterialshader.cpp b/src/quick3d/imports/scene3d/scene3dsgmaterialshader.cpp index d25c6a7f7..55538ad1f 100644 --- a/src/quick3d/imports/scene3d/scene3dsgmaterialshader.cpp +++ b/src/quick3d/imports/scene3d/scene3dsgmaterialshader.cpp @@ -118,21 +118,25 @@ const char *Scene3DSGMaterialShader::fragmentShader() const if (ctx->format().version() >= qMakePair(3, 2) && ctx->format().profile() == QSurfaceFormat::CoreProfile) { return "" "#version 150 core \n" + "uniform bool visible; \n" "uniform sampler2D source; \n" "uniform float qt_Opacity; \n" "in vec2 qt_TexCoord; \n" "out vec4 fragColor; \n" "void main() { \n" - " vec4 p = texture(source, qt_TexCoord); \n" + " if (!visible) discard; \n" + " vec4 p = texture(source, qt_TexCoord); \n" " float a = qt_Opacity * p.a; \n" " fragColor = vec4(p.rgb * a, a); \n" "}"; } else { return "" + "uniform bool visible; \n" "uniform highp sampler2D source; \n" "uniform highp float qt_Opacity; \n" "varying highp vec2 qt_TexCoord; \n" "void main() { \n" + " if (!visible) discard; \n" " highp vec4 p = texture2D(source, qt_TexCoord); \n" " highp float a = qt_Opacity * p.a; \n" " gl_FragColor = vec4(p.rgb * a, a); \n" @@ -144,6 +148,7 @@ void Scene3DSGMaterialShader::initialize() { m_matrixId = program()->uniformLocation("qt_Matrix"); m_opacityId = program()->uniformLocation("qt_Opacity"); + m_visibleId = program()->uniformLocation("visible"); } void Scene3DSGMaterialShader::updateState(const RenderState &state, QSGMaterial *newEffect, QSGMaterial *oldEffect) @@ -172,6 +177,9 @@ void Scene3DSGMaterialShader::updateState(const RenderState &state, QSGMaterial t->updateBindOptions(); } + if (oldTx == nullptr || oldTx->visible() != tx->visible()) + program()->setUniformValue(m_visibleId, tx->visible()); + if (state.isMatrixDirty()) program()->setUniformValue(m_matrixId, state.combinedMatrix()); |