code improved

This commit is contained in:
Uwe Rathmann 2020-10-26 14:13:57 +01:00
parent 5757d49ba9
commit 07cdcc56df
2 changed files with 56 additions and 65 deletions

View File

@ -51,10 +51,12 @@ namespace
setShaderSourceFile( QOpenGLShader::Vertex,
QStringLiteral( ":/qt-project.org/scenegraph/shaders/opaquetexture.vert" ) );
if ( m_isOpaque )
{
setShaderSourceFile( QOpenGLShader::Fragment,
QStringLiteral( ":/qt-project.org/scenegraph/shaders/opaquetexture.frag" ) );
if ( !m_isOpaque )
}
else
{
setShaderSourceFile( QOpenGLShader::Fragment,
QStringLiteral( ":/qt-project.org/scenegraph/shaders/texture.frag" ) );
@ -152,6 +154,30 @@ class QskTextureNodePrivate final : public QSGGeometryNodePrivate
{
}
void updateTextureGeometry()
{
QRectF r( 0, 0, 1, 1 );
if ( this->mirrorOrientations & Qt::Horizontal )
{
r.setLeft( 1 );
r.setRight( 0 );
}
if ( mirrorOrientations & Qt::Vertical )
{
r.setTop( 1 );
r.setBottom( 0 );
}
const qreal ratio = QskTextureRenderer::devicePixelRatio();
const QRectF scaledRect( rect.x(), rect.y(),
rect.width() / ratio, rect.height() / ratio );
QSGGeometry::updateTexturedRectGeometry( &geometry, scaledRect, r );
}
QSGGeometry geometry;
Material opaqueMaterial;
@ -196,14 +222,14 @@ void QskTextureNode::setRect( const QRectF& r )
{
Q_D( QskTextureNode );
if ( d->rect == r )
return;
if ( d->rect != r )
{
d->rect = r;
d->updateTextureGeometry();
updateTexture();
markDirty( DirtyGeometry );
}
}
QRectF QskTextureNode::rect() const
{
@ -211,6 +237,25 @@ QRectF QskTextureNode::rect() const
return d->rect;
}
void QskTextureNode::setMirrored( Qt::Orientations orientations )
{
Q_D( QskTextureNode );
if ( d->mirrorOrientations != orientations )
{
d->mirrorOrientations = orientations;
d->updateTextureGeometry();
markDirty( DirtyMaterial );
}
}
Qt::Orientations QskTextureNode::mirrored() const
{
Q_D( const QskTextureNode );
return d->mirrorOrientations;
}
void QskTextureNode::setTextureId( uint textureId )
{
Q_D( QskTextureNode );
@ -228,15 +273,8 @@ void QskTextureNode::setTextureId( uint textureId )
d->material.setTextureId( textureId );
d->opaqueMaterial.setTextureId( textureId );
updateTexture();
DirtyState dirty = DirtyMaterial;
#if 0
// if old/new is in the atlas
dirty |= DirtyGeometry;
#endif
markDirty( dirty );
markDirty( DirtyMaterial );
}
uint QskTextureNode::textureId() const
@ -244,48 +282,3 @@ uint QskTextureNode::textureId() const
Q_D( const QskTextureNode );
return d->material.textureId();
}
void QskTextureNode::setMirrored( Qt::Orientations orientations )
{
Q_D( QskTextureNode );
if ( d->mirrorOrientations == orientations )
return;
d->mirrorOrientations = orientations;
updateTexture();
markDirty( DirtyMaterial );
}
Qt::Orientations QskTextureNode::mirrored() const
{
Q_D( const QskTextureNode );
return d->mirrorOrientations;
}
void QskTextureNode::updateTexture()
{
Q_D( QskTextureNode );
QRectF r( 0, 0, 1, 1 );
if ( d->mirrorOrientations & Qt::Horizontal )
{
r.setLeft( 1 );
r.setRight( 0 );
}
if ( d->mirrorOrientations & Qt::Vertical )
{
r.setTop( 1 );
r.setBottom( 0 );
}
const qreal ratio = QskTextureRenderer::devicePixelRatio();
const QRectF rect( d->rect.x(), d->rect.y(),
d->rect.width() / ratio, d->rect.height() / ratio );
QSGGeometry::updateTexturedRectGeometry( &d->geometry, rect, r );
}

View File

@ -29,8 +29,6 @@ class QSK_EXPORT QskTextureNode : public QSGGeometryNode
Qt::Orientations mirrored() const;
private:
void updateTexture();
Q_DECLARE_PRIVATE( QskTextureNode )
};