이 페이지에서

QRhiSwapChain Class

스왑체인 리소스. 더 보기...

헤더: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
다음부터: Qt 6.6
상속: QRhiResource

공개 유형

enum Flag { SurfaceHasPreMulAlpha, SurfaceHasNonPreMulAlpha, sRGB, UsedAsTransferSource, NoVSync, MinimalBufferCount }
flags Flags
enum Format { SDR, HDRExtendedSrgbLinear, HDR10, HDRExtendedDisplayP3Linear }
enum StereoTargetBuffer { LeftBuffer, RightBuffer }

공개 함수

virtual bool createOrResize() = 0
virtual QRhiCommandBuffer *currentFrameCommandBuffer() = 0
virtual QRhiRenderTarget *currentFrameRenderTarget() = 0
virtual QRhiRenderTarget *currentFrameRenderTarget(QRhiSwapChain::StereoTargetBuffer targetBuffer)
QSize currentPixelSize() const
QRhiRenderBuffer *depthStencil() const
QRhiSwapChain::Flags flags() const
QRhiSwapChain::Format format() const
virtual QRhiSwapChainHdrInfo hdrInfo()
virtual bool isFormatSupported(QRhiSwapChain::Format f) = 0
virtual QRhiRenderPassDescriptor *newCompatibleRenderPassDescriptor() = 0
QRhiSwapChainProxyData proxyData() const
QRhiRenderPassDescriptor *renderPassDescriptor() const
int sampleCount() const
void setDepthStencil(QRhiRenderBuffer *ds)
void setFlags(QRhiSwapChain::Flags f)
void setFormat(QRhiSwapChain::Format f)
void setProxyData(const QRhiSwapChainProxyData &d)
void setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)
void setSampleCount(int samples)
(since 6.9) void setShadingRateMap(QRhiShadingRateMap *map)
void setWindow(QWindow *window)
(since 6.9) QRhiShadingRateMap *shadingRateMap() const
virtual QSize surfacePixelSize() = 0
QWindow *window() const

재구현된 공용 함수

virtual QRhiResource::Type resourceType() const override

상세 설명

스왑체인(swapchain)을 사용하면 렌더링 결과를 표면(surface)에 표시할 수 있습니다. 스왑체인은 일반적으로 일련의 컬러 버퍼(color buffer)로 구성됩니다. 이 중 한 번에 하나씩만 표시됩니다.

다음은 QWindow 에 렌더링하기 위해 스왑체인 및 관련 리소스를 생성하고 관리하는 일반적인 패턴입니다:

void init()
{
    sc = rhi->newSwapChain();
    ds = rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil,
                              QSize(), // no need to set the size here due to UsedWithSwapChainOnly
                              1,
                              QRhiRenderBuffer::UsedWithSwapChainOnly);
    sc->setWindow(window);
    sc->setDepthStencil(ds);
    rp = sc->newCompatibleRenderPassDescriptor();
    sc->setRenderPassDescriptor(rp);
    resizeSwapChain();
}

void resizeSwapChain()
{
    hasSwapChain = sc->createOrResize();
}

void render()
{
    if (!hasSwapChain || notExposed)
        return;

    if (sc->currentPixelSize() != sc->surfacePixelSize() || newlyExposed) {
        resizeSwapChain();
        if (!hasSwapChain)
            return;
        newlyExposed = false;
    }

    rhi->beginFrame(sc);
    // ...
    rhi->endFrame(sc);
}

QWindow 의 크기 조정 이벤트에 의존하여 스왑체인 크기를 조정하는 것은 피해야 합니다. 특히 표면 크기가 QWindow 에서 보고된 치수와 항상 정확히 일치하지 않을 수 있다는 점을 고려해야 합니다. 안전하고 크로스 플랫폼에서 통용되는 접근 방식은 새 프레임을 시작할 때마다 surfacePixelSize()를 통해 확인하는 것입니다.

스왑체인 해제 작업은 QWindow 및 기본 네이티브 창이 완전히 활성화되어 실행 중인 상태에서 이루어져야 합니다. 앞의 예시를 바탕으로 설명하면:

void releaseSwapChain()
{
    if (hasSwapChain) {
        sc->destroy();
        hasSwapChain = false;
    }
}

// assuming Window is our QWindow subclass
bool Window::event(QEvent *e)
{
    switch (e->type()) {
    case QEvent::UpdateRequest: // for QWindow::requestUpdate()
        render();
        break;
    case QEvent::PlatformSurface:
        if (static_cast<QPlatformSurfaceEvent *>(e)->surfaceEventType() == QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed)
            releaseSwapChain();
        break;
    default:
        break;
    }
    return QWindow::event(e);
}

스왑체인 초기화 및 첫 번째 프레임 렌더링 시작은 임의의 시점에 시작해서는 안 됩니다. 안전하고 크로스 플랫폼에서 통용되는 접근 방식은 `expose` 이벤트에 의존하는 것입니다. ` QExposeEvent `은 플랫폼에 따라 창이 매핑되거나 가려지거나 크기가 조정될 때마다 전송되는, 규정이 다소 유연한 이벤트입니다.

void Window::exposeEvent(QExposeEvent *)
{
    // initialize and start rendering when the window becomes usable for graphics purposes
    if (isExposed() && !running) {
        running = true;
        init();
    }

    // stop pushing frames when not exposed or size becomes 0
    if ((!isExposed() || (hasSwapChain && sc->surfacePixelSize().isEmpty())) && running)
        notExposed = true;

    // continue when exposed again and the surface has a valid size
    if (isExposed() && running && notExposed && !sc->surfacePixelSize().isEmpty()) {
        notExposed = false;
        newlyExposed = true;
    }

    if (isExposed() && !sc->surfacePixelSize().isEmpty())
        render();
}

렌더링이 시작되면 새 프레임을 요청하는 간단한 방법은 ` QWindow::requestUpdate()`를 호출하는 것입니다. 일부 플랫폼에서는 이 기능이 단순한 타이머에 불과하지만, 다른 플랫폼에서는 구체적인 구현 방식을 따릅니다. 예를 들어 macOS나 iOS에서는 CVDisplayLink를 기반으로 할 수 있습니다. 위의 예제는 ` QEvent::UpdateRequest`을 처리함으로써 이미 업데이트 요청에 대비되어 있습니다.

QRhiRenderTarget 역할을 수행하는 동시에, QRhiSwapChain은 QRhiCommandBuffer 도 관리합니다. QRhi::endFrame()를 호출하면 기록된 명령을 제출하고, present 요청을 큐에 추가합니다. 기본 동작은 스왑 간격을 1로 설정하여, 디스플레이의 수직 갱신 주기와 동기화되도록 하는 것입니다. 따라서 beginFrame() 및 endFrame()을 호출하는 렌더링 스레드는 vsync에 따라 속도가 조절됩니다. 일부 백엔드에서는 flags()에서 QRhiSwapChain:NoVSync 를 전달하여 이 기능을 비활성화할 수 있습니다.

멀티샘플링(MSAA)은 setSampleCount()을 통해 요청될 경우 애플리케이션에 대해 투명하게 처리됩니다. 해당되는 경우, QRhiSwapChain이 추가 컬러 버퍼를 생성하고 프레임 끝에서 멀티샘플 해결 명령을 실행합니다. OpenGL의 경우, QRhi 을 초기화하기 전에 QSurfaceFormat::setDefaultFormat()를 호출하여 QSurfaceFormat 을 통해 적절한 샘플 수를 요청해야 합니다.

참고: 이는 호환성 보장이 제한된 RHI API입니다. 자세한 내용은 QRhi 를 참조하십시오.

멤버 유형 문서

enum QRhiSwapChain::Flag
flags QRhiSwapChain::Flags

스왑체인 속성을 설명하는 플래그 값

상수값설명
QRhiSwapChain::SurfaceHasPreMulAlpha1 << 0대상 서페이스에 프리멀티플라이드 알파(premultiplied alpha)가 적용된 투명도가 있음을 나타냅니다. 예를 들어, 대상 QWindow 에서 알파 채널이 활성화된 경우 Qt Quick 가 이 방식을 사용하는데, 이는 씬그래프 렌더러가 항상 알파 값을 적색(red), 녹색(green), 청색(blue) 값에 곱한 프래그먼트를 출력하기 때문입니다. 플랫폼 간에 동일한 동작을 보장하려면, 스왑체인에 이 플래그가 설정될 때마다 대상 QWindow 에서 항상 ` QSurfaceFormat::alphaBufferSize()`를 0이 아닌 값으로 설정해야 합니다.
QRhiSwapChain::SurfaceHasNonPreMulAlpha1 << 1대상 표면이 프리멀티플라이되지 않은 알파를 가진 투명성을 갖는다는 것을 나타냅니다. 시스템 컴포지터가 항상 프리멀티플라이된 알파를 가진 콘텐츠를 기대하는 경우, 일부 시스템에서는 이 기능이 지원되지 않을 수 있음을 유의하십시오. 이 경우, 이 플래그가 설정되었을 때의 동작은 SurfaceHasPreMulAlpha와 동일할 것으로 예상됩니다.
QRhiSwapChain::sRGB1 << 2해당되는 경우, 스왑체인(swapchain)의 색상 버퍼 및/또는 렌더 타겟 뷰에 대해 sRGB 형식을 선택하도록 요청합니다. 이는 이 스왑체인을 대상으로 하는 모든 콘텐츠에 대해 sRGB 프레임버퍼 업데이트 및 블렌딩이 활성화됨을 의미하며, 이를 해제할 수 없다는 점에 유의하십시오. OpenGL의 경우, QWindow 의 QSurfaceFormat 에 추가로 sRGBColorSpace 를 설정해야 합니다. 이는 스왑체인 형식이 QRhiSwapChain::SDR 로 설정된 경우에만 적용됩니다.
QRhiSwapChain::UsedAsTransferSource1 << 3QRhiResourceUpdateBatch::readBackTexture()에서 스왑체인이 리드백의 소스로 사용될 것임을 나타냅니다.
QRhiSwapChain::NoVSync1 << 4수직 동기화(vertical sync) 대기를 비활성화하고, 렌더링 스레드의 스로틀링도 방지하도록 요청합니다. 이 동작은 백엔드에 따라 다르며, 이를 제어할 수 있는 경우에만 적용됩니다. 일부 백엔드는 이 요청을 완전히 무시할 수도 있습니다. OpenGL의 경우, 대신 QSurfaceFormat::setSwapInterval()을 통해 QWindow 의 스왑 간격을 0으로 설정해 보십시오.
QRhiSwapChain::MinimalBufferCount1 << 5스왑 체인을 생성할 때 버퍼 수를 최소값으로 설정하도록 요청합니다. 그래픽 구현에서 더 높은 최소값을 지정하지 않는 한, 실제로는 2개가 됩니다. 이 설정은 그래픽 API(예: Vulkan)를 통해 이러한 제어가 가능한 백엔드에서만 적용됩니다. 기본적으로 요청할 버퍼 수는 백엔드가 결정하며(실제로는 거의 항상 2개 또는 3개입니다), 이는 애플리케이션이 신경 쓸 문제가 아닙니다. 그러나 예를 들어 Vulkan의 경우, 백엔드는 모바일 기기에서 일부 Vulkan 구현체와 관련된 특이한 성능 문제를 피하기 위해 더 많은 수(3)를 선호할 가능성이 높습니다. 일부 플랫폼에서는 더 적은 버퍼 수(2)를 강제하는 것이 유리할 수 있으므로, 이 플래그를 통해 이를 강제할 수 있습니다. 이 모든 설정은 처리 중인 프레임 수에는 영향을 미치지 않으므로, 스왑체인 이미지 버퍼 수가 ` N`보다 크더라도 CPU(QRhi)는 여전히 GPU보다 최대 ` N - 1 ` 프레임 앞선 프레임을 준비하게 됩니다. (N = QRhi::FramesInFlight 이며, 일반적으로 2입니다.)

Flags 유형은 QFlags<Flag>에 대한 typedef입니다. 이 유형은 Flag 값들의 OR 조합을 저장합니다.

enum QRhiSwapChain::Format

스왑체인 형식을 설명합니다. 기본 형식은 SDR입니다.

이 열거형은 ` isFormatSupported()`와 함께 사용되어, 지정된 형식으로 스왑체인을 생성하는 것이 플랫폼 및 해당 창의 화면에서 지원되는지 사전에 확인하며, ` setFormat()`와 함께 사용되어 ` createOrResize()`를 처음 호출하기 전에 스왑체인에 요청된 형식을 설정합니다.

상수값설명
QRhiSwapChain::SDR0백엔드 및 플랫폼에 따라 8비트 RGBA 또는 BGRA입니다. 특히 OpenGL ES의 경우, 플랫폼이 8비트 미만을 제공할 수 있습니다(예: EGL 및 QSurfaceFormat 가 565 또는 444 형식을 선택하기 때문이며, 이는 QRhi 의 제어 범위를 벗어납니다). 표준 동적 범위입니다. QRhiSwapChain::sRGB 플래그 설정과 결합될 수 있습니다.
QRhiSwapChain::HDRExtendedSrgbLinear116비트 부동소수점 RGBA, 고동적 범위, 확장 선형 sRGB(scRGB) 색 공간. 여기에는 Rec. 709 기본색(SDR/sRGB와 동일)과 선형 색상이 포함됩니다. 디스플레이의 기본 색 공간(예: HDR10)으로의 변환은 윈도우 시스템에서 수행됩니다. Windows에서는 이것이 시스템 컴포지터의 표준 색 공간이며, 데스크톱 플랫폼에서 HDR 스왑체인에 일반적으로 권장되는 형식입니다.
QRhiSwapChain::HDR10210비트 부호 없는 정수(unsigned int) RGB 또는 BGR에 2비트 알파를 더한, 고동적 범위, ST2084 PQ 전달 함수를 사용하는 HDR10(Rec. 2020) 색 공간.
QRhiSwapChain::HDRExtendedDisplayP3Linear316비트 부동 소수점 RGBA, 높은 동적 범위, 확장 선형 Display P3 색 공간. iOS 및 VisionOS와 같은 플랫폼에서 HDR을 위한 주요 선택지입니다.

enum QRhiSwapChain::StereoTargetBuffer

입체 스왑체인에 사용할 백버퍼를 선택합니다.

상수값
QRhiSwapChain::LeftBuffer0
QRhiSwapChain::RightBuffer1

멤버 함수 설명

[pure virtual] bool QRhiSwapChain::createOrResize()

아직 생성되지 않은 경우 스왑체인을 생성하고, 대상 표면의 현재 크기에 맞춰 스왑체인 버퍼의 크기를 조정합니다. 대상 표면의 크기가 이전과 다를 때마다 이 함수를 호출하십시오.

참고: ` destroy()`는 스왑체인을 완전히 해제해야 할 때, 일반적으로 ` QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed` 호출 시에만호출하십시오 . 크기 조정을 수행하려면 `createOrResize()`를 호출하기만 하면 됩니다.

성공 시 true 를 반환하고, 그래픽 작업이 실패한 경우 false 를 반환합니다. 반환 값과 관계없이 destroy()를 호출하는 것은 항상 안전합니다.

[pure virtual] QRhiCommandBuffer *QRhiSwapChain::currentFrameCommandBuffer()

이 스왑체인(swapchain)을 사용하여 beginFrame()이 호출되었다고 가정할 때, ` beginFrame ` - ` endFrame ` 블록 내에서 렌더링 명령어와 리소스 업데이트를 기록할 수 있는 명령어 버퍼를 반환합니다.

참고: 반환된객체는 endFrame() 호출 후에도 다음 beginFrame()이 호출될 때까지 유효하지만, 이때 반환된 명령 버퍼를 사용하여 명령을 기록해서는 안 됩니다. 대신, lastCompletedGpuTime()을 호출하는 등의 방법으로 해당 프레임(또는 이전 프레임) 동안 수집된 데이터를 조회하는 데 사용할 수 있습니다.

참고: 이 값은 프레임 간에 캐시되어 재사용되어서는 안 됩니다. 호출자는 beginFrame()이 다시 호출되면 반환된 객체를 계속 보유해서는 안 됩니다. 대신, 이 함수를 다시 호출하여 명령 버퍼 객체를 조회해야 합니다.

[pure virtual] QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget()

스왑체인(swapchain)의 현재 백버퍼를 렌더링하기 위해 beginPass()와 함께 사용할 수 있는 렌더 타겟을 반환합니다. 이 스왑체인을 사용하여 beginFrame()이 호출된 QRhi::beginFrame() - QRhi::endFrame() 블록 내에서만 유효합니다.

참고: 이 값은 프레임 간에 캐시되어 재사용되어서는 안 됩니다.

[virtual] QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget(QRhiSwapChain::StereoTargetBuffer targetBuffer)

스왑체인(swapchain)의 왼쪽 또는 오른쪽 백버퍼에 렌더링하기 위해 beginPass()와 함께 사용할 수 있는 렌더 타깃을 반환합니다. 이 오버로드는 입체 렌더링, 즉 연관된 렌더 타깃( QWindow )이 하나의 버퍼가 아닌 각 눈마다 하나씩 총 두 개의 컬러 버퍼로 구성된 경우에만 사용해야 합니다.

입체 렌더링이 지원되지 않는 경우, 반환 값은 기본 타겟이 됩니다. 이 오버로드는 Metal을 제외한 모든 하드웨어 백엔드에서 QSurfaceFormat::StereoBuffers 와 함께 지원되며, 이는 런타임 시 그래픽 및 디스플레이 드라이버 스택에서 지원된다는 전제 하에 적용됩니다. Metal 및 Null 백엔드는 이 오버로드를 호출할 때 기본 렌더 타겟을 반환합니다.

참고: 이 값은 프레임 간에 캐시되어 재사용되어서는 안 됩니다.

QSize QRhiSwapChain::currentPixelSize() const

스왑 체인이 마지막으로 성공적으로 구축되었을 때의 크기를 반환합니다. 이 값을 사용하여 ` createOrResize()`를 다시 호출해야 할지 여부를 결정할 수 있습니다. ` currentPixelSize() != surfacePixelSize() `인 경우 스왑 체인의 크기를 조정해야 합니다.

참고: 일반적인 렌더링 로직은 새 프레임을 준비하기 시작할 때 이 함수를 호출하여 출력 크기를 얻고, 이 함수에서 반환된 크기를 기반으로 뷰포트 등과 같은 관련 계산을 수행합니다.

대부분의 경우 이 값은 QWindow::size() * QWindow::devicePixelRatio() 와 동일하지만, QWindow 에서 보고된 크기를 신뢰한다고 해서 모든 플랫폼 및 그래픽 API 구현에서 정확함이 보장되지는 않습니다. 따라서 출력 레이어나 서페이스의 크기를 픽셀 단위로 확인해야 할 때는 이 함수를 사용하는 것이 강력히 권장됩니다.

또한, 전용 렌더링 스레드에서 QRhi 를 사용할 때 발생할 수 있는 잠재적인 데이터 경합을 피할 수 있다는 추가적인 이점도 있습니다. 이는 메인 스레드에서 업데이트된 데이터에 접근할 수 있는 QWindow 함수를 호출할 필요가 없기 때문입니다.

surfacePixelSize()도 참조하십시오 .

QRhiRenderBuffer *QRhiSwapChain::depthStencil() const

현재 깊이-스텐실용으로 연결된 렌더 버퍼를 반환합니다.

setDepthStencil()도 참조하십시오 .

QRhiSwapChain::Flags QRhiSwapChain::flags() const

현재 설정된 플래그를 반환합니다.

setFlags()도 참조하십시오 .

QRhiSwapChain::Format QRhiSwapChain::format() const

현재 설정된 형식을 반환합니다.

setFormat()도 참조하십시오 .

[virtual] QRhiSwapChainHdrInfo QRhiSwapChain::hdrInfo()

연관된 디스플레이에 대한 HDR 정보를 반환합니다.

이 작업이 비용이 적게 드는 작업이라고 가정해서는 안 됩니다. 플랫폼에 따라 이 함수는 다양한 플랫폼 쿼리를 수행하며, 이로 인해 성능에 영향을 미칠 수 있습니다.

참고: 창이 ` set` 상태인 한, ` createOrResize()` 호출 전에 이 함수를 호출할수 있습니다 .

참고: 초기화된 스왑체인이 있는 창을 디스플레이 간(특성이 다른 HDR 간, HDR에서 SDR로 등)에 이동할 때어떤 일이 발생하는지는 현재 명확하게 정의되어 있지 않으며, 윈도우 시스템과 컴포지터에 크게 좌우되며, 플랫폼에 따라 동작이 달라질 수 있습니다. 현재 QRhi 는 createOrResize() 호출 시점에 스왑체인에 연결된 창이 속해 있던 디스플레이에 대해, hdrInfo()가 유효한 데이터를 반환할 것(사용 가능한 경우)만을 보장합니다.

QRhiSwapChainHdrInfo도 참조하십시오 .

[pure virtual] bool QRhiSwapChain::isFormatSupported(QRhiSwapChain::Format f)

지정된 스왑체인 형식 f 이 지원되는 경우 true를 반환합니다. SDR은 항상 지원됩니다.

참고: createOrResize()와 독립적으로 호출할수 있지만, window()는 이미 설정되어 있어야 합니다. 창이 설정되지 않은 상태에서 호출하면 백엔드 및 플랫폼에 따라 예기치 않은 결과가 발생할 수 있습니다(대부분의 HDR 형식의 경우 false가 반환될 가능성이 높음). 이는 HDR 형식 지원이 일반적으로 특정 시점에 스왑체인에 연결된 창이 속한 출력(화면)과 연동되어 있기 때문입니다. HDR 형식의 경우 결과가 true라면, 그 동안 창이 다른 화면으로 이동되지 않는 한 해당 형식으로 스왑체인을 생성하는 데 성공할 것으로 예상됩니다.

이 함수의 주요 용도는 창이 이미 설정된 후 첫 번째 ` createOrResize()`를 호출하기 전에 이 함수를 호출하는 것입니다. 이를 통해 ` QRhi ` 백엔드는 플랫폼 또는 윈도우 시스템에 특화된 쿼리를 수행하여, 해당 창(및 창이 표시된 화면)이 지정된 형식으로 진정한 HDR 출력이 가능한지 확인할 수 있습니다.

포맷이 지원된다고 보고되면, ` setFormat()`를 호출하여 요청된 포맷을 설정하고 ` createOrResize()`를 호출하십시오. 그러나 이에 따른 결과를 유의해야 합니다. HDR 포맷을 성공적으로 요청하면 다른 색 공간을 처리해야 하며, HDR을 지원하지 않는 콘텐츠에 대해 화이트 레벨 보정을 수행하거나, 톤 매핑 방법을 조정하거나, 오프스크린 렌더 타겟 설정을 조정하는 등의 작업이 필요할 수 있습니다.

setFormat()도 참조하십시오 .

[pure virtual] QRhiRenderPassDescriptor *QRhiSwapChain::newCompatibleRenderPassDescriptor()

이 스왑체인과 호환되는 새로운 ` QRhiRenderPassDescriptor ` 객체를 반환합니다.

반환된 값은 두 가지 방식으로 사용됩니다. 즉, ` setRenderPassDescriptor()` 및 ` QRhiGraphicsPipeline::setRenderPassDescriptor()`에 전달될 수 있습니다. 렌더 패스 디스크립터는 ` flags()`에 의해 영향을 받을 수 있는 첨부 정보(색상, 깊이/스텐실)와 로드/저장 동작을 설명합니다. ` QRhiGraphicsPipeline `는 ` compatible ` QRhiRenderPassDescriptor 가 설정된 스왑체인에서만 사용할 수 있습니다.

createOrResize()도 참조하십시오 .

QRhiSwapChainProxyData QRhiSwapChain::proxyData() const

현재 설정된 프록시 데이터를 반환합니다.

setProxyData()도 참조하십시오 .

QRhiRenderPassDescriptor *QRhiSwapChain::renderPassDescriptor() const

현재 연결된 QRhiRenderPassDescriptor 객체를 반환합니다.

setRenderPassDescriptor()도 참조하십시오 .

[override virtual] QRhiResource::Type QRhiSwapChain::resourceType() const

QRhiResource::resourceType() const를 재구현합니다.

리소스 유형을 반환합니다.

int QRhiSwapChain::sampleCount() const

현재 설정된 샘플 수를 반환합니다. 1은 멀티샘플 앤티앨리어싱이 적용되지 않음을 의미합니다.

setSampleCount()도 참조하십시오 .

void QRhiSwapChain::setDepthStencil(QRhiRenderBuffer *ds)

렌더 버퍼 ds 를 뎁스-스텐실 버퍼로 사용하도록 설정합니다.

depthStencil()도 참조하십시오 .

void QRhiSwapChain::setFlags(QRhiSwapChain::Flags f)

f 플래그를 설정합니다.

flags()도 참조하십시오 .

void QRhiSwapChain::setFormat(QRhiSwapChain::Format f)

f 의 형식을 설정합니다.

isFormatSupported()에서 지원되지 않는 것으로 보고되는 형식은 설정하지 마십시오. 특정 형식에 대한 지원 여부는 스왑체인에 연결된 창이 열려 있는 화면에 따라 달라질 수 있습니다. Windows 및 macOS와 같은 일부 플랫폼에서는 HDR 출력이 작동하려면 디스플레이 설정에서 HDR 출력이 활성화되어 있어야 합니다.

고동적 범위(HDR) 출력에 대한 자세한 내용은 isFormatSupported(), QRhiSwapChainHdrInfo 및 Format 을 참조하십시오.

format()도 참조하십시오 .

void QRhiSwapChain::setProxyData(const QRhiSwapChainProxyData &d)

d 의 프록시 데이터를 설정합니다.

proxyData() 및 QRhi::updateSwapChainProxyData()도 참조하십시오 .

void QRhiSwapChain::setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)

QRhiRenderPassDescriptor ( desc)와 제휴하고 있습니다.

renderPassDescriptor()도 참조하십시오 .

void QRhiSwapChain::setSampleCount(int samples)

샘플 수를 설정합니다. ` samples `의 일반적인 값은 1(MSAA 없음), 4(4배 MSAA) 또는 8(8배 MSAA)입니다.

sampleCount() 및 QRhi::supportedSampleCounts()도 참조하십시오 .

[since 6.9] void QRhiSwapChain::setShadingRateMap(QRhiShadingRateMap *map)

지정된 QRhiShadingRateMap map 와 연결됩니다. 이 기능은 QRhi::VariableRateShadingMap 기능이 지원되는 것으로 보고된 경우에만 작동합니다.

QRhiCommandBuffer::setShadingRate()도 호출되는 경우, 각 타일에 대해 두 셰이딩 속도 중 더 높은 쪽이 사용됩니다. 현재 콤바이너의 동작을 제어할 수 있는 방법은 제공되지 않습니다.

참고: 셰이딩 레이트 맵을설정하면 새로운 QRhiRenderPassDescriptor 가 필요하며, 일부 네이티브 스왑체인 객체를 재구축해야 합니다. 따라서 스왑체인이 이미 설정된 경우, setShadingRateMap() 호출 직후에 newCompatibleRenderPassDescriptor() 및 setRenderPassDescriptor()을 호출해야 합니다. 그런 다음 createOrResize()도 다시 호출해야 합니다. 이는 그래픽 파이프라인과 같은 요소에 연쇄적인 영향을 미칩니다. 그래픽 파이프라인 역시 새로운 ` QRhiRenderPassDescriptor `과 연결된 후 재구축되어야 합니다. 이를 처리하는 방법에 대한 제안은 ` QRhiRenderPassDescriptor::serializedFormat()`을 참조하십시오. 해당 파이프라인에 대해서도 ` QRhiGraphicsPipeline::UsesShadingRate ` 플래그를 설정해야 한다는 점을 잊지 마십시오.

이 함수는 Qt 6.9에서 도입되었습니다.

shadingRateMap()도 참조하십시오 .

void QRhiSwapChain::setWindow(QWindow *window)

window 를 설정합니다.

window()도 참조하십시오 .

[since 6.9] QRhiShadingRateMap *QRhiSwapChain::shadingRateMap() const

현재 설정된 QRhiShadingRateMap 를 반환합니다. 기본값은 nullptr 입니다.

이 함수는 Qt 6.9에서 도입되었습니다.

setShadingRateMap()도 참조하십시오 .

[pure virtual] QSize QRhiSwapChain::surfacePixelSize()

반환값: 창과 연결된 서피스 또는 레이어의 크기.

경고: 이 값이 ` QWindow::size() * QWindow::devicePixelRatio()`와 동일하다고 가정해서는 안됩니다 . 일부 그래픽 API 및 윈도우 시스템 인터페이스(예: Vulkan)에서는 서페이스의 크기가 연관된 창과 다를 수 있는 이론적 가능성이 있습니다. 이러한 경우를 지원하기 위해, 렌더링 로직은 크기와 관련된 계산(예: 뷰포트)을 항상 ` QRhiSwapChain`에서 보고된 크기를 기준으로 해야 하며, ` QWindow `에서 조회된 크기를 기준으로 해서는 안 됩니다.

참고: window()이 이미 설정되어 있는 경우, createOrResize() 호출 전에 이 함수를 호출할 수도 있습니다. 이를 currentPixelSize()과 함께 사용하면 스왑 체인의 크기를 조정해야 할 시점을 감지할 수 있습니다. 그러나 기본이 되는 네이티브 객체(서피스, 레이어 등)의 크기는 “실시간”으로 변경될 수 있으므로, 이 함수가 호출될 때마다 기본 구현에서 보고한 최신 값을 반환하며, 원자성은 보장되지 않는다는 점에 유의해야 합니다. 따라서 프레임에서 사용되는 그래픽 리소스의 픽셀 크기를 결정하기 위해 이 함수를 사용하는 것은 강력히 권장하지 않습니다. 대신 currentPixelSize()을 사용하십시오. 이 함수는 원자적인 크기를 반환하며, createOrResize() 호출 사이에는 값이 변경되지 않습니다.

참고: 스왑체인(swapchain)의 컬러 버퍼와 함께 사용되는 뎁스-스텐실(depth-stencil) 버퍼의경우 , ` QRhiRenderBuffer:UsedWithSwapChainOnly` 플래그가 제공하는 자동 크기 조정 및 재구축 동작을 사용하는 것이 강력히 권장됩니다. QRhiRenderBuffer::setPixelSize()에 전달할 크기를 얻기 위해 이 함수를 통해 서피스 크기를 조회하는 것은 위에서 설명한 바와 같이 원자성이 보장되지 않으므로 피해야 합니다.

currentPixelSize()도 참조하십시오 .

QWindow *QRhiSwapChain::window() const

현재 설정된 창을 반환합니다.

setWindow()도 참조하십시오 .

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