En esta página

ShaderEffectSource QML Type

Renderiza un Qt Quick en una textura y la muestra. Más...

Import Statement: import QtQuick
Inherits:

Item

Propiedades

Métodos

Descripción detallada

El tipo ShaderEffectSource renderiza sourceItem en una textura y lo muestra en la escena. sourceItem se dibuja en la textura como si fuera un elemento raíz totalmente opaco. Así, sourceItem puede ser invisible, pero aparecer en la textura.

Puede utilizar el ShaderEffectSource como:

  • una fuente de textura en ShaderEffect. Esto le permite aplicar efectos de sombreado personalizados a cualquier elemento. Qt Quick elemento.
  • una caché para un elemento complejo. El item complejo puede ser renderizado una vez en la textura, la cual puede entonces ser animada libremente sin necesidad de renderizar el item complejo de nuevo cada frame.
  • una capa de opacidad. ShaderEffectSource te permite aplicar una opacidad a elementos como grupo en lugar de a cada elemento individualmente.

import QtQuick 2.0

Rectangle {
    width: 200
    height: 100
    gradient: Gradient {
        GradientStop { position: 0; color: "white" }
        GradientStop { position: 1; color: "black" }
    }
    Row {
        opacity: 0.5
        Item {
            id: foo
            width: 100; height: 100
            Rectangle { x: 5; y: 5; width: 60; height: 60; color: "red" }
            Rectangle { x: 20; y: 20; width: 60; height: 60; color: "orange" }
            Rectangle { x: 35; y: 35; width: 60; height: 60; color: "yellow" }
        }
        ShaderEffectSource {
            width: 100; height: 100
            sourceItem: foo
        }
    }
}

El tipo ShaderEffectSource no redirige ninguna entrada de ratón o teclado a sourceItem. Si oculta el sourceItem estableciendo visible a false o opacity a cero, ya no reaccionará a la entrada. En los casos en los que el ShaderEffectSource está destinado a sustituir al sourceItem, normalmente se desea ocultar el sourceItem mientras se sigue gestionando la entrada. Para ello, puede utilizar la propiedad hideSource.

Puede combinar ShaderEffectSource y MultiEffect:

  • Para utilizar el mismo elemento fuente en múltiples efectos y mantenerlo sin cambios.
  • Para utilizar una parte del elemento fuente, utilizando ShaderEffectSource.sourceRect.
  • Para disminuir la resolución del elemento fuente, por ejemplo, para mejorar el rendimiento, utilizando la propiedad ShaderEffectSource.textureSize.

Nota: El ShaderEffectSource se basa en el soporte FBO multisampling para antialias en los bordes. Si el hardware subyacente no lo soporta, como es el caso de la mayoría de los chips gráficos embebidos, los bordes renderizados dentro de un ShaderEffectSource no tendrán antialiasing. Una forma de remediar esto es duplicar el tamaño de la fuente de efectos y renderizarla con smooth: true (este es el valor por defecto de smooth). Esto equivaldrá a un multimuestreo 4x, a costa de un menor rendimiento y un mayor uso de memoria.

Advertencia: En la mayoría de los casos, el uso de un ShaderEffectSource disminuirá el rendimiento, y en todos los casos, aumentará el uso de memoria de vídeo. Renderizar a través de un ShaderEffectSource también puede llevar a una menor calidad ya que algunas implementaciones de OpenGL soportan backbuffer multimuestreado, pero no objetos framebuffer multimuestreados.

Documentación de propiedades

format : enumeration

Esta propiedad define el formato de la textura de respaldo. Modificar esta propiedad tiene más sentido cuando el elemento se utiliza como textura de origen de un ShaderEffect.

ConstanteDescripción
ShaderEffectSource.RGBA8
ShaderEffectSource.RGBA16F
ShaderEffectSource.RGBA32F
ShaderEffectSource.AlphaA partir de Qt 6.0, este valor no está en uso y tiene el mismo efecto que RGBA8 en la práctica.
ShaderEffectSource.RGBA partir de Qt 6.0, este valor no está en uso y tiene el mismo efecto que RGBA8 en la práctica.
ShaderEffectSource.RGBAA partir de Qt 6.0, este valor no está en uso y tiene el mismo efecto que RGBA8 en la práctica.

hideSource : bool

Si esta propiedad es true, el sourceItem se oculta, aunque seguirá siendo renderizado en la textura. A diferencia de ocultar sourceItem estableciendo visible a false, establecer esta propiedad a true no impedirá que la entrada del ratón o del teclado llegue a sourceItem. Esta propiedad es útil cuando ShaderEffectSource está anclado encima de sourceItem.

live : bool

Si esta propiedad es verdadera, la textura se actualiza cada vez que se actualiza sourceItem. De lo contrario, será una imagen congelada, incluso si a sourceItem se le asigna un nuevo elemento. La propiedad es true por defecto.

mipmap : bool

Si esta propiedad es true, se generan mipmaps para la textura.

Nota: Algunas implementaciones de OpenGL ES 2 no soportan mipmapping de texturas que no sean de potencia de dos.

recursive : bool

Establece esta propiedad a true si el ShaderEffectSource tiene una dependencia de sí mismo. Los ShaderEffectSources forman una cadena de dependencia, donde un ShaderEffectSource puede ser parte del sourceItem de otro. Si hay un bucle en esta cadena, un ShaderEffectSource podría acabar intentando renderizar en la misma textura que está utilizando como fuente, lo que no está permitido por OpenGL. Cuando esta propiedad está en true, se asigna una textura extra para que ShaderEffectSource pueda mantener una copia de la textura del fotograma anterior. Puede entonces renderizar en una textura y utilizar la textura del fotograma anterior como fuente.

Establecer tanto esta propiedad como live a true hará que el gráfico de la escena se renderice continuamente. Dado que ShaderEffectSource depende de sí mismo, actualizarlo significa que inmediatamente se ensucia de nuevo.

samples : int

Esta propiedad permite solicitar renderizado multimuestreo.

Por defecto, el multimuestreo se activa siempre que se activa el multimuestreo para toda la ventana, suponiendo que el renderizador de scenegraph en uso y la API gráfica subyacente lo soporten.

Estableciendo el valor a 2, 4, etc. se puede solicitar el multimuestreo para una parte de la escena sin activar el multimuestreo para toda la escena. De esta forma, el multimuestreo se aplica sólo a un subárbol determinado, lo que puede suponer un aumento significativo del rendimiento, ya que el multimuestreo no se aplica a otras partes de la escena.

Nota: Activar el multimuestreo puede ser potencialmente costoso independientemente del tamaño de la capa, ya que incurre en un coste de rendimiento y memoria dependiente del hardware y de los controladores.

Nota: Esta propiedad sólo es funcional cuando se dispone de soporte para renderbuffers multimuestreo y framebuffer blits. En caso contrario, el valor se ignora silenciosamente.

sourceItem : Item

Esta propiedad contiene el ítem a ser renderizado en la textura. Si se establece en null mientras live es true, se liberarán los recursos de la textura.

sourceRect : rect

Esta propiedad define qué área rectangular de sourceItem se renderizará en la textura. El rectángulo de origen puede ser mayor que el propio sourceItem. Si el rectángulo es nulo, que es el valor predeterminado, todo sourceItem se renderiza en la textura.

textureMirroring : enumeration

Esta propiedad define cómo debe reflejarse la textura OpenGL generada. El valor por defecto es ShaderEffectSource.MirrorVertically. El reflejo personalizado puede ser útil si la textura generada es accedida directamente por shaders personalizados, como los especificados por ShaderEffect. El reflejo no afecta a la representación de la interfaz de usuario del elemento ShaderEffectSource.

ConstanteDescripción
ShaderEffectSource.NoMirroringSin reflejo
ShaderEffectSource.MirrorHorizontallyLa textura generada se voltea a lo largo del eje X.
ShaderEffectSource.MirrorVerticallyLa textura generada se voltea a lo largo del eje Y.

textureSize : size

Esta propiedad contiene el tamaño en píxeles solicitado para la textura. Si está vacía, que es el valor por defecto, se utiliza el tamaño del rectángulo de origen.

Nota: Este valor está en píxeles ya que controla directamente el tamaño de un objeto de textura.

Nota: Algunas plataformas tienen un límite en el tamaño de los objetos framebuffer, lo que significa que el tamaño real de la textura puede ser mayor que el tamaño solicitado.

wrapMode : enumeration

Esta propiedad define los modos de envoltura OpenGL asociados a la textura. Modificar esta propiedad tiene más sentido cuando el elemento se utiliza como textura de origen de un ShaderEffect.

El valor por defecto es ShaderEffectSource.ClampToEdge.

ConstanteDescripción
ShaderEffectSource.ClampToEdgeGL_CLAMP_TO_EDGE horizontal y verticalmente
ShaderEffectSource.RepeatHorizontallyGL_REPEAT horizontalmente, GL_CLAMP_TO_EDGE verticalmente
ShaderEffectSource.RepeatVerticallyGL_CLAMP_TO_EDGE horizontal, GL_REPEAT vertical
ShaderEffectSource.RepeatGL_REPEAT horizontal y vertical

Nota: Algunas implementaciones de OpenGL ES 2 no admiten el modo de ajuste GL_REPEAT con texturas que no sean de potencia de dos.

Documentación del método

void scheduleUpdate()

Programa un re-renderizado de la textura para el siguiente fotograma. Utilícelo para actualizar la textura cuando live sea falso.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.