QQuickRhiItem Class

QQuickRhiItem 클래스는 OpenGL에 묶여 있지 않고 QRhi API와 Qt Quick 를 사용하여 렌더링을 통합할 수 있는 QQuickFramebufferObject 의 이식 가능한 대안입니다. 더 보기...

헤더: #include <QQuickRhiItem>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick
이후: Qt 6.7
상속합니다: QQuickItem
상태: 예비

이 클래스는 개발 중이며 변경될 수 있습니다.

속성

공용 함수

QQuickRhiItem(QQuickItem *parent = nullptr)
virtual ~QQuickRhiItem() override
bool alphaBlending() const
QQuickRhiItem::TextureFormat colorBufferFormat() const
QSize effectiveColorBufferSize() const
int fixedColorBufferHeight() const
int fixedColorBufferWidth() const
bool isMirrorVerticallyEnabled() const
int sampleCount() const
void setAlphaBlending(bool enable)
void setColorBufferFormat(QQuickRhiItem::TextureFormat format)
void setFixedColorBufferHeight(int height)
void setFixedColorBufferWidth(int width)
void setMirrorVertically(bool enable)
void setSampleCount(int samples)

재구현된 공용 함수

virtual bool isTextureProvider() const override
virtual QSGTextureProvider *textureProvider() const override

신호

보호된 함수

virtual QQuickRhiItemRenderer *createRenderer() = 0
bool isAutoRenderTargetEnabled() const
void setAutoRenderTarget(bool enabled)

재구현된 보호 함수

virtual bool event(QEvent *e) override
virtual void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override
virtual void releaseResources() override

상세 설명

참고: QQuickRhiItem은 Qt 6.7의 기술 프리뷰 버전입니다. 이 API는 개발 중이며 변경될 수 있습니다.

QQuickRhiItem은 Qt Quick 의 세계에서 사실상 QRhiWidget 에 대응하는 함수입니다. 이 둘은 모두 서브클래스로서, 화면 밖 컬러 버퍼를 대상으로 하는 QRhi 기반 렌더링을 기록할 수 있습니다. 그런 다음 결과 2D 이미지가 나머지 Qt Quick 장면과 합성됩니다.

참고: QQuickRhiItem은 공개 Qt API이지만, QShaderQShaderDescription 를 포함한 Qt GUI 모듈의 QRhi 클래스 제품군은 제한된 호환성을 보장합니다. 이러한 클래스에 대한 소스 또는 바이너리 호환성 보장은 없으므로 API는 애플리케이션이 개발된 Qt 버전에서만 작동하도록 보장됩니다. 그러나 소스와 호환되지 않는 변경은 최소한으로 유지하는 것을 목표로 하며 마이너 릴리스(6.7, 6.8 등)에서만 이루어집니다. qquickrhiitem.h 에는 QRhi 관련 헤더가 직접 포함되지 않습니다. QQuickRhiItem 서브클래스를 구현할 때 이러한 클래스를 사용하려면 Qt::GuiPrivate (CMake를 사용하는 경우)에 링크하고 rhi 접두사가 붙은 적절한 헤더를 포함하세요(예: #include <rhi/qrhi.h>).

QQuickRhiItem은 레거시 QQuickFramebufferObject 클래스를 대체합니다. 후자는 본질적으로 OpenGL / OpenGL ES에 연결되어 있는 반면, QQuickRhiItem은 QRhi 클래스와 함께 작동하므로 Vulkan, Metal, Direct 3D 11/12 및 OpenGL / OpenGL ES에서 동일한 렌더링 코드를 실행할 수 있습니다. 개념적으로나 기능적으로 매우 유사하며 QQuickFramebufferObject 에서 QQuickRhiItem으로 마이그레이션하는 것은 간단합니다. QQuickFramebufferObject 은 OpenGL API와 직접 작동하는 기존 애플리케이션 코드와의 호환성을 보장하기 위해 계속 사용할 수 있습니다.

참고: Qt Quick 씬 그래프의 software 변환을 사용할 경우 QQuickRhiItem이 작동하지 않습니다.

대부분의 플랫폼에서 씬 그래프 렌더링, 즉 QQuickRhiItem에 의해 수행되는 렌더링은 전용 스레드에서 이루어집니다. 이러한 이유로 QQuickRhiItem 클래스는 항목 구현( QQuickItem 서브클래스)과 실제 렌더링 로직을 엄격하게 분리합니다. QML에 노출되는 속성 및 UI 관련 헬퍼 함수와 같은 모든 항목 로직은 QQuickRhiItem 서브클래스에 위치해야 합니다. 렌더링과 관련된 모든 것은 QQuickRhiItemRenderer 클래스에 위치해야 합니다. 두 스레드에서 발생하는 경합 조건 및 읽기/쓰기 문제를 방지하려면 렌더러와 항목이 공유 변수를 읽거나 쓰지 않는 것이 중요합니다. 아이템과 렌더러 간의 통신은 주로 QQuickRhiItem::synchronize() 함수를 통해 이루어져야 합니다. 이 함수는 GUI 스레드가 차단된 상태에서 렌더링 스레드에서 호출됩니다. 항목과 렌더러 간의 통신을 위해 큐에 대기 중인 연결 또는 이벤트를 사용할 수도 있습니다.

애플리케이션은 QQuickRhiItem과 QQuickRhiItemRenderer 를 모두 서브클래싱해야 합니다. QQuickRhiItemRenderer 서브클래스의 새 인스턴스를 반환하려면 순수 가상 createRenderer() 함수를 다시 구현해야 합니다.

QRhiWidget 와 마찬가지로 QQuickRhiItem은 일반적으로 2D 텍스처(QRhiTexture)인 컬러 버퍼를 자동으로 관리하거나 멀티샘플링이 사용 중인 경우 QRhiRenderBuffer 를 관리합니다. (일부 3D API는 텍스처와 렌더버퍼를 구분하지만, 기본 네이티브 리소스는 동일하며 렌더버퍼는 주로 OpenGL ES 3.0에서 멀티샘플링을 허용하기 위해 사용됩니다).

텍스처의 크기는 기본적으로 항목의 크기에 맞게 조정됩니다( device pixel ratio 고려됨). 항목 크기가 변경되면 텍스처가 올바른 크기로 다시 생성됩니다. 고정 크기를 선호하는 경우 fixedColorBufferWidthfixedColorBufferHeight 을 0이 아닌 값으로 설정합니다.

QQuickRhiItem은 texture provider 이며 텍스처 공급자를 사용하는 ShaderEffects 및 기타 클래스에서 직접 사용할 수 있습니다.

주요 사용 사례는 아니지만, QQuickRhiItem을 사용하면 Vulkan, Metal, Direct 3D 또는 OpenGL과 같은 3D 그래픽 API를 직접 사용하는 렌더링 코드를 통합할 수도 있습니다. QRhi 렌더 패스 내에서 네이티브 명령을 기록하는 방법에 대한 자세한 내용은 QRhiCommandBuffer::beginExternal(), 기존 네이티브 텍스처를 래핑한 다음 후속 렌더 패스에서 QRhi 와 함께 사용하는 방법은 QRhiTexture::createFrom()를 참조하세요. 네이티브 3D API 환경 구성(예: 디바이스 확장)에 대해서는 QQuickGraphicsConfiguration 을 참조하고, QQuickWindowQWindow::setVulkanInstance()을 미리 호출하여 커스텀 QVulkanInstance 과 연결할 수 있다는 점에 유의하세요.

참고: QQuickRhiItem은 항상 QQuickWindow 에서 사용하는 것과 동일한 QRhi 인스턴스를 사용합니다(그리고 더 나아가 동일한 OpenGL 컨텍스트, Vulkan 디바이스 등). 어떤 기본 3D 그래픽 API를 사용할지 선택하려면 QQuickWindow 에서 setGraphicsApi()를 충분히 일찍 호출하세요. 씬 그래프가 초기화된 후에는 변경할 수 없으며, 씬의 모든 QQuickRhiItem 인스턴스는 동일한 3D API를 사용하여 렌더링됩니다.

간단한 예제

QQuickRhiItem의 다음 서브클래스를 살펴봅시다. 여기에는 완전한 형태로 표시되어 있습니다. 이 클래스는 원근 투영이 있는 단일 삼각형을 렌더링하며, 여기서 삼각형은 사용자 지정 항목의 angle 속성을 기반으로 회전합니다. (예를 들어 QML의 NumberAnimation 같은 애니메이션으로 구동할 수 있음을 의미합니다.)

class ExampleRhiItemRenderer : public QQuickRhiItemRenderer
{
public:
    void initialize(QRhiCommandBuffer *cb) override;
    void synchronize(QQuickRhiItem *item) override;
    void render(QRhiCommandBuffer *cb) override;

private:
    QRhi *m_rhi = nullptr;
    std::unique_ptr<QRhiBuffer> m_vbuf;
    std::unique_ptr<QRhiBuffer> m_ubuf;
    std::unique_ptr<QRhiShaderResourceBindings> m_srb;
    std::unique_ptr<QRhiGraphicsPipeline> m_pipeline;
    QMatrix4x4 m_viewProjection;
    float m_angle = 0.0f;
};

class ExampleRhiItem : public QQuickRhiItem
{
    Q_OBJECT
    QML_NAMED_ELEMENT(ExampleRhiItem)
    Q_PROPERTY(float angle READ angle WRITE setAngle NOTIFY angleChanged)

public:
    QQuickRhiItemRenderer *createRenderer() override;

    float angle() const { return m_angle; }
    void setAngle(float a);

signals:
    void angleChanged();

private:
    float m_angle = 0.0f;
};

QQuickRhiItemRenderer *ExampleRhiItem::createRenderer()
{
    return new ExampleRhiItemRenderer;
}

void ExampleRhiItem::setAngle(float a)
{
    if (m_angle == a)
        return;

    m_angle = a;
    emit angleChanged();
    update();
}

void ExampleRhiItemRenderer::synchronize(QQuickRhiItem *rhiItem)
{
    ExampleRhiItem *item = static_cast<ExampleRhiItem *>(rhiItem);
    if (item->angle() != m_angle)
        m_angle = item->angle();
}

static QShader getShader(const QString &name)
{
    QFile f(name);
    return f.open(QIODevice::ReadOnly) ? QShader::fromSerialized(f.readAll()) : QShader();
}

static float vertexData[] = {
    0.0f,   0.5f,   1.0f, 0.0f, 0.0f,
    -0.5f,  -0.5f,   0.0f, 1.0f, 0.0f,
    0.5f,  -0.5f,   0.0f, 0.0f, 1.0f,
};

void ExampleRhiItemRenderer::initialize(QRhiCommandBuffer *cb)
{
    if (m_rhi != rhi()) {
        m_pipeline.reset();
        m_rhi = rhi();
    }

    if (!m_pipeline) {
        m_vbuf.reset(m_rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(vertexData)));
        m_vbuf->create();

        m_ubuf.reset(m_rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64));
        m_ubuf->create();

        m_srb.reset(m_rhi->newShaderResourceBindings());
        m_srb->setBindings({
            QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, m_ubuf.get()),
        });
        m_srb->create();

        m_pipeline.reset(m_rhi->newGraphicsPipeline());
        m_pipeline->setShaderStages({
            { QRhiShaderStage::Vertex, getShader(QLatin1String(":/shaders/color.vert.qsb")) },
            { QRhiShaderStage::Fragment, getShader(QLatin1String(":/shaders/color.frag.qsb")) }
        });
        QRhiVertexInputLayout inputLayout;
        inputLayout.setBindings({
            { 5 * sizeof(float) }
        });
        inputLayout.setAttributes({
            { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
            { 0, 1, QRhiVertexInputAttribute::Float3, 2 * sizeof(float) }
        });
        m_pipeline->setVertexInputLayout(inputLayout);
        m_pipeline->setShaderResourceBindings(m_srb.get());
        m_pipeline->setRenderPassDescriptor(renderTarget()->renderPassDescriptor());
        m_pipeline->create();

        QRhiResourceUpdateBatch *resourceUpdates = m_rhi->nextResourceUpdateBatch();
        resourceUpdates->uploadStaticBuffer(m_vbuf.get(), vertexData);
        cb->resourceUpdate(resourceUpdates);
    }

    const QSize outputSize = renderTarget()->pixelSize();
    m_viewProjection = m_rhi->clipSpaceCorrMatrix();
    m_viewProjection.perspective(45.0f, outputSize.width() / (float) outputSize.height(), 0.01f, 1000.0f);
    m_viewProjection.translate(0, 0, -4);
}

void ExampleRhiItemRenderer::render(QRhiCommandBuffer *cb)
{
    QRhiResourceUpdateBatch *resourceUpdates = m_rhi->nextResourceUpdateBatch();
    QMatrix4x4 modelViewProjection = m_viewProjection;
    modelViewProjection.rotate(m_angle, 0, 1, 0);
    resourceUpdates->updateDynamicBuffer(m_ubuf.get(), 0, 64, modelViewProjection.constData());

    const QColor clearColor = QColor::fromRgbF(0.4f, 0.7f, 0.0f, 1.0f);
    cb->beginPass(renderTarget(), clearColor, { 1.0f, 0 }, resourceUpdates);

    cb->setGraphicsPipeline(m_pipeline.get());
    const QSize outputSize = renderTarget()->pixelSize();
    cb->setViewport(QRhiViewport(0, 0, outputSize.width(), outputSize.height()));
    cb->setShaderResources();
    const QRhiCommandBuffer::VertexInput vbufBinding(m_vbuf.get(), 0);
    cb->setVertexInput(0, 1, &vbufBinding);
    cb->draw(3);

    cb->endPass();
}

이 간단한 클래스는 QRhiWidget 소개에 표시된 코드와 거의 동일하다는 점이 주목할 만합니다. 버텍스 셰이더와 프래그먼트 셰이더도 동일합니다. 이 셰이더들은 벌칸 스타일의 GLSL 소스 코드로 제공되며, Qt 셰이더 인프라에서 먼저 처리해야 합니다. 이 작업은 qsb 명령줄 도구를 수동으로 실행하거나 CMake에서 qt_add_shaders() 함수를 사용하여 수행합니다. QQuickRhiItem은 애플리케이션과 함께 제공되는 이러한 사전 처리된 .qsb 파일을 로드합니다. Qt의 셰이더 변환 인프라에 대한 자세한 내용은 Qt Shader Tools 를 참조하십시오.

color.vert

#version 440
layout(location = 0) in vec4 position;
layout(location = 1) in vec3 color;
layout(location = 0) out vec3 v_color;
layout(std140, binding = 0) uniform buf {
    mat4 mvp;
};

void main()
{
    v_color = color;
    gl_Position = mvp * position;
}

color.frag

#version 440
layout(location = 0) in vec3 v_color;
layout(location = 0) out vec4 fragColor;

void main()
{
    fragColor = vec4(v_color, 1.0);
}

QML에 노출되면( QML_NAMED_ELEMENT 참조) 사용자 정의 항목을 모든 장면에서 인스턴스화할 수 있습니다. (CMake 프로젝트에서 qt_add_qml_module에 지정된 적절한 URI 을 임포트한 후).

ExampleRhiItem {
    anchors.fill: parent
    anchors.margins: 10
    NumberAnimation on angle { from: 0; to: 360; duration: 5000; loops: Animation.Infinite }
}

더 복잡한 예제는 씬 그래프 - RHI 텍스처 항목을 참조하십시오.

또한 QQuickRhiItemRenderer, 씬 그래프 - RHI 텍스처 항목, QRhi, 씬 그래프 및 렌더링을참조하십시오 .

프로퍼티 문서

alphaBlending : bool

QQuickRhiItem 및 해당 렌더러에서 생성된 콘텐츠로 쿼드 텍스처를 그릴 때 블렌딩을 항상 활성화할지 여부를 제어합니다.

기본값은 false 입니다. 이는 성능상의 이유로, 반투명도를 사용하지 않는 경우 QQuickRhiItemRenderer 은 불투명한 색상으로 지워지고 알파가 1보다 작은 조각은 렌더링되지 않으므로 블렌딩을 활성화할 필요가 없습니다.

QQuickRhiItemRenderer 서브클래스가 반투명도를 포함해서 렌더링하는 경우 이 속성을 true로 설정하세요.

참고: 특정 조건에서는 이 속성의 값에 관계없이 블렌딩이 계속 수행됩니다. 예를 들어 항목의 opacity (더 정확하게는 부모 체인에서 상속된 합산 불투명도)가 1보다 작으면 이 속성이 false로 설정되어 있어도 블렌딩이 자동으로 활성화됩니다.

참고: Qt Quick 씬 그래프는 미리 곱해진 알파에 의존하고 기대합니다. 예를 들어 렌더러에서 배경을 0.5의 알파 값으로 지우려는 경우 빨간색, 녹색, 파란색 투명 색상 값에도 0.5를 곱해야 합니다. 그렇지 않으면 블렌딩 결과가 올바르지 않습니다.

기능에 액세스합니다:

bool alphaBlending() const
void setAlphaBlending(bool enable)

알림 신호:

void alphaBlendingChanged()

colorBufferFormat : TextureFormat

이 속성은 컬러 버퍼로 사용되는 텍스처의 텍스처 형식을 제어합니다. QQuickRhiItemQRhiTexture 에서 지원하는 형식의 하위 집합으로 렌더링을 지원합니다. QRhi::isTextureFormatSupported ()에서 지원되는 것으로 보고된 형식만 지정해야 하며, 그렇지 않으면 렌더링이 작동하지 않습니다.

참고: 항목과 해당 렌더러가 이미 초기화되어 렌더링된 상태에서 새 형식을 설정하면 연결된 QRhiRenderPassDescriptor 이 다른 텍스처 형식으로 인해 호환되지 않는 경우 렌더러가 생성한 모든 QRhiGraphicsPipeline 객체를 사용할 수 없게 될 수 있습니다. sampleCount 을 동적으로 변경하는 것과 마찬가지로, 이는 초기화() 또는 렌더() 구현이 기존 파이프라인을 해제하고 새 파이프라인을 생성해야 함을 의미합니다.

함수에 액세스합니다:

QQuickRhiItem::TextureFormat colorBufferFormat() const
void setColorBufferFormat(QQuickRhiItem::TextureFormat format)

알림 신호:

void colorBufferFormatChanged()

[read-only] effectiveColorBufferSize : const QSize

이 속성은 기본 색상 버퍼( QRhiTexture 또는 QRhiRenderBuffer)의 크기를 픽셀 단위로 표시합니다. 이 프로퍼티는 GUI(메인) 스레드, QML 바인딩 또는 JavaScript에서 사용할 수 있도록 제공됩니다.

참고: 씬 그래프 렌더 스레드에서 작동하는QQuickRhiItemRenderer 구현은 이 프로퍼티를 사용해서는 안 됩니다. 그보다는 render target 에서 크기를 쿼리해야 합니다.

참고: 렌더 스레드에서 렌더링이 발생할 때 값이 변경된다는 점에서 메인 스레드의 관점에서 이 값은 비동기적으로 사용할 수 있습니다. 즉, 이 속성은 주로 QML 바인딩에서 유용합니다. 애플리케이션 코드는 QQuickRhiItem 객체가 생성될 때 이미 값이 최신 상태라고 가정해서는 안 됩니다.

이 속성은 읽기 전용 속성입니다.

함수 액세스:

QSize effectiveColorBufferSize() const

알림 신호:

void effectiveColorBufferSizeChanged()

fixedColorBufferHeight : int

항목의 관련 텍스처의 고정 높이(픽셀 단위)입니다. 항목의 크기에 의존하지 않는 고정 텍스처 크기가 필요한 경우에 적합합니다. 이 크기는 항목의 지오메트리(씬 내 크기 및 배치)에 영향을 주지 않으므로 텍스처의 콘텐츠가 항목의 영역에 맞게 늘어나거나(확대) 축소되어 표시됩니다.

예를 들어, 항목(픽셀) 크기의 정확히 두 배인 크기를 설정하면 2배 슈퍼샘플링(해상도의 두 배로 렌더링한 다음 장면에서 항목에 해당하는 쿼드를 텍스처링할 때 암시적으로 축소)이 효과적으로 수행됩니다.

기본값은 0 입니다. 값이 0이면 텍스처의 크기가 아이템의 크기를 따릅니다. (texture size = item size * device pixel ratio).

기능에 액세스합니다:

int fixedColorBufferHeight() const
void setFixedColorBufferHeight(int height)

알림 신호:

void fixedColorBufferHeightChanged()

fixedColorBufferWidth : int

항목의 관련 텍스처 또는 렌더버퍼의 고정 너비(픽셀 단위)입니다. 항목의 크기에 의존하지 않는 고정된 색상 버퍼 크기가 필요한 경우에 적합합니다. 이 크기는 항목의 지오메트리(씬 내 크기 및 배치)에 영향을 주지 않으므로 텍스처의 콘텐츠가 항목 영역에 맞게 늘어나거나(스케일 업) 축소되어 나타납니다.

예를 들어, 항목(픽셀) 크기의 정확히 두 배인 크기를 설정하면 2배 슈퍼샘플링(해상도의 두 배로 렌더링한 다음 장면에서 항목에 해당하는 쿼드를 텍스처링할 때 암시적으로 축소)이 효과적으로 수행됩니다.

기본값은 0 입니다. 값이 0이면 텍스처의 크기가 아이템의 크기를 따릅니다. (texture size = item size * device pixel ratio).

기능에 액세스합니다:

int fixedColorBufferWidth() const
void setFixedColorBufferWidth(int width)

알림 신호:

void fixedColorBufferWidthChanged()

mirrorVertically : bool

이 프로퍼티는 텍스처 쿼드를 그릴 때 텍스처 UV를 플립할지 여부를 제어합니다. 오프스크린 컬러 버퍼의 콘텐츠와 QQuickRhiItemRenderer 에 의해 구현되는 렌더링에는 영향을 미치지 않습니다.

기본값은 false 입니다.

함수에 액세스합니다:

bool isMirrorVerticallyEnabled() const
void setMirrorVertically(bool enable)

알림 신호:

void mirrorVerticallyChanged()

sampleCount : int

이 프로퍼티는 다중 샘플 앤티앨리어싱의 샘플 수를 제어합니다. 기본값은 1, 즉 MSAA가 비활성화되어 있습니다.

유효한 값은 1, 4, 8, 때로는 16과 32입니다. QRhi::supportedSampleCounts()를 사용하여 런타임에 지원되는 샘플 수를 쿼리할 수 있지만 일반적으로 애플리케이션은 1(MSAA 없음), 4배(일반 MSAA) 또는 8배(높은 MSAA)를 요청해야 합니다.

참고: 새 값을 설정하면 렌더러에서 생성된 모든 QRhiGraphicsPipeline 오브젝트는 그 이후부터 동일한 샘플 수를 사용해야 합니다. 다른 샘플 수로 생성된 기존 QRhiGraphicsPipeline 오브젝트는 더 이상 사용할 수 없습니다. 값이 변경되면 모든 색상 및 깊이 스텐실 버퍼가 자동으로 소멸되고 다시 생성되며 initialize()가 다시 호출됩니다. 그러나 isAutoRenderTargetEnabled()가 false 인 경우 뎁스 스텐실 버퍼 또는 추가 색상 버퍼와 관련하여 이를 관리하는 것은 애플리케이션에 달려 있습니다.

샘플 수를 기본값인 1에서 더 높은 값으로 변경하면 colorTexture()가 nullptr 이 되고 msaaColorBuffer()가 유효한 객체를 반환하기 시작한다는 의미입니다. 다시 1(또는 0)로 전환하면 그 반대의 의미로, 다음번 초기화() 호출에서 msaaColorBuffer()는 nullptr 를 반환하는 반면 colorTexture()는 다시 한 번 유효하게 됩니다. 또한 resolveTexture()는 샘플 수가 1보다 클 때마다(즉, MSAA가 사용 중일 때) 유효한(다중 샘플이 아닌) QRhiTexture 을 반환합니다.

함수 액세스:

int sampleCount() const
void setSampleCount(int samples)

알림 신호:

void sampleCountChanged()

QQuickRhiItemRenderer::msaaColorBuffer() 및 QQuickRhiItemRenderer::resolveTexture()도 참조하세요 .

멤버 함수 문서

[explicit] QQuickRhiItem::QQuickRhiItem(QQuickItem *parent = nullptr)

주어진 parent 으로 새로운 QQuickRhiItem을 생성합니다.

[override virtual noexcept] QQuickRhiItem::~QQuickRhiItem()

파괴자.

[pure virtual protected] QQuickRhiItemRenderer *QQuickRhiItem::createRenderer()

이 함수를 다시 구현하여 QQuickRhiItemRenderer 서브클래스의 새 인스턴스를 생성하고 반환합니다.

이 함수는 GUI 스레드가 차단된 상태에서 렌더링 스레드에서 호출됩니다.

[override virtual protected] bool QQuickRhiItem::event(QEvent *e)

다시 구현합니다: QQuickItem::event(QEvent *ev).

[override virtual protected] void QQuickRhiItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)

재구현합니다: QQuickItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry).

[protected] bool QQuickRhiItem::isAutoRenderTargetEnabled() const

현재 자동 뎁스 스텐실 버퍼 및 렌더 타깃 관리 설정을 반환합니다.

기본적으로 이 값은 true 입니다.

setAutoRenderTarget()도 참조하세요 .

[override virtual] bool QQuickRhiItem::isTextureProvider() const

재구현합니다: QQuickItem::isTextureProvider() const.

[override virtual protected] void QQuickRhiItem::releaseResources()

다시 구현합니다: QQuickItem::releaseResources().

[protected] void QQuickRhiItem::setAutoRenderTarget(bool enabled)

항목에서 깊이 스텐실 QRhiRenderBufferQRhiTextureRenderTarget 을 자동으로 생성하고 유지 관리할지 여부를 제어합니다. 기본값은 true 입니다. 이 함수를 비활성화하려면 enabledfalse 으로 설정하여 파생 클래스의 생성자에서 이 함수를 호출하세요.

자동 모드에서는 뎁스 스텐실 버퍼의 크기와 샘플 수가 컬러 버퍼 텍스처의 설정을 따릅니다. 비자동 모드에서는 renderTarget() 및 depthStencilBuffer()가 항상 nullptr 를 반환하며, 이러한 객체를 설정하고 관리하는 것은 애플리케이션의 초기화() 구현에 달려 있습니다.

[override virtual] QSGTextureProvider *QQuickRhiItem::textureProvider() const

재구현합니다: QQuickItem::textureProvider() const.

© 2025 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.