QRhiSwapChain Class
스왑체인 리소스. 더 보기...
Header: | #include <rhi/qrhi.h> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) 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) |
void | setWindow(QWindow *window) |
virtual QSize | surfacePixelSize() = 0 |
QWindow * | window() const |
재구현된 공용 함수
virtual QRhiResource::Type | resourceType() const override |
상세 설명
스왑체인을 사용하면 렌더링 결과를 표면에 표시할 수 있습니다. 스왑체인은 일반적으로 일련의 컬러 버퍼로 뒷받침됩니다. 이 중 한 번에 하나씩 표시됩니다.
아래는 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); }
스왑체인을 초기화하고 첫 번째 프레임을 렌더링하기 시작하는 것은 아무 때나 시작할 수 없습니다. 안전한 크로스 플랫폼 접근 방식은 노출 이벤트에 의존하는 것입니다. 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로 설정하여 디스플레이의 세로 새로 고침과 동기화하는 것입니다. 따라서 시작 프레임() 및 끝 프레임()을 호출하는 렌더링 스레드는 vsync로 스로틀됩니다. 일부 백엔드에서는 flags()에 QRhiSwapChain:NoVSync 을 전달하여 이 기능을 비활성화할 수 있습니다.
멀티샘플링(MSAA)은 setSampleCount()를 통해 요청할 때 애플리케이션에 투명하게 처리됩니다. 해당되는 경우, QRhiSwapChain은 추가 컬러 버퍼를 생성하고 프레임이 끝날 때 멀티샘플 리졸브 명령을 내리는 작업을 처리합니다. OpenGL의 경우, QRhi 을 초기화하기 전에 QSurfaceFormat::setDefaultFormat()을 호출하여 QSurfaceFormat 을 통해서도 적절한 샘플 수를 요청해야 합니다.
참고: 이 API는 호환성이 제한적으로 보장되는 RHI API이며, 자세한 내용은 QRhi 을 참조하세요.
멤버 유형 문서
열거형 QRhiSwapChain::플래그
플래그 QRhiSwapChain::플래그
스왑체인 속성을 설명하는 플래그 값
Constant | 값 | 설명 |
---|---|---|
QRhiSwapChain::SurfaceHasPreMulAlpha | 1 << 0 | 대상 서페이스에 미리 곱해진 알파가 있는 투명도를 가짐을 나타냅니다. 예를 들어 대상 QWindow 에서 알파 채널이 활성화된 경우 Qt Quick 이 사용되는데, 시나리오 렌더러는 항상 알파를 빨강, 초록, 파랑 값에 곱한 조각을 출력하기 때문입니다. 플랫폼 간에 동일한 동작을 보장하려면 스왑체인에서 이 플래그가 설정될 때마다 타깃 QWindow 에서 항상 QSurfaceFormat::alphaBufferSize()를 0이 아닌 값으로 설정하세요. |
QRhiSwapChain::SurfaceHasNonPreMulAlpha | 1 << 1 | 대상 서페이스에 곱하지 않은 알파가 있는 투명도를 나타냅니다. 시스템 컴포저가 항상 알파가 미리 곱해진 콘텐츠를 기대하는 경우 일부 시스템에서는 이 기능이 지원되지 않을 수 있다는 점에 유의하세요. 이 경우 이 플래그가 설정된 동작은 SurfaceHasPreMulAlpha와 동일할 것으로 예상됩니다. |
QRhiSwapChain::sRGB | 1 << 2 | 스왑체인의 컬러 버퍼 및/또는 렌더링 대상 뷰에 대해 sRGB 형식을 선택하도록 요청합니다(해당되는 경우). 이는 이 스왑체인을 대상으로 하는 모든 콘텐츠에 대해 sRGB 프레임버퍼 업데이트 및 블렌딩이 활성화됨을 의미하며, 옵트아웃은 불가능하다는 점에 유의하세요. OpenGL의 경우 QWindow 의 QSurfaceFormat 에서 sRGBColorSpace 를 추가로 설정하세요. 스왑체인 형식이 QRhiSwapChain::SDR 로 설정된 경우에만 적용됩니다. |
QRhiSwapChain::UsedAsTransferSource | 1 << 3 | QRhiResourceUpdateBatch::readBackTexture()에서 스왑체인을 읽기 소스로 사용할 것임을 나타냅니다. |
QRhiSwapChain::NoVSync | 1 << 4 | 수직 동기화 대기를 비활성화하여 렌더링 스레드 스로틀링을 방지하도록 요청합니다. 이 동작은 백엔드에 따라 다르며 이를 제어할 수 있는 경우에만 적용됩니다. 일부는 요청을 완전히 무시할 수도 있습니다. OpenGL의 경우 대신 QSurfaceFormat::setSwapInterval()를 통해 QWindow 에서 스왑 간격을 0으로 설정해 보세요. |
QRhiSwapChain::MinimalBufferCount | 1 << 5 | 그래픽 구현이 이보다 더 높은 최소 버퍼 수를 가지고 있지 않는 한, 실제로는 2인 최소 버퍼 수로 스왑체인을 생성하도록 요청합니다. 그래픽 API를 통해 이러한 제어가 가능한 백엔드(예: Vulkan)에만 적용됩니다. 기본적으로 요청하는 버퍼 수는 백엔드에서 결정하며(실제로는 거의 항상 2 또는 3), 애플리케이션이 관여할 바가 아닙니다. 그러나 예를 들어 모바일 디바이스에서 일부 Vulkan 구현에서 발생하는 홀수 성능 문제를 방지하기 위해 백엔드는 더 높은 숫자(3)를 선호할 가능성이 높습니다. 일부 플랫폼에서는 더 낮은 버퍼 수(2)를 강제하는 것이 유리할 수 있으므로 이 플래그를 사용하면 이를 강제할 수 있습니다. 이 모든 것이 유지되는 프레임 수에는 영향을 미치지 않으므로 스왑체인 이미지 버퍼 수가 N 보다 큰 경우에도 CPU(QRhi)는 최대 N - 1 프레임까지 GPU보다 앞서 프레임을 준비합니다(N = QRhi::FramesInFlight, 일반적으로 2). |
Flags 유형은 QFlags<Flag>에 대한 typedef입니다. 플래그 값의 OR 조합을 저장합니다.
enum QRhiSwapChain::Format
스왑체인 형식을 설명합니다. 기본 형식은 SDR입니다.
이 열거형은 isFormatSupported()와 함께 사용되어 플랫폼과 창 관련 화면에서 지정된 포맷으로 스왑체인 생성이 지원되는지 미리 확인하고, setFormat()와 함께 사용되어 createOrResize()를 처음 호출하기 전에 스왑체인에서 요청된 포맷을 설정합니다.
상수 | 값 | 설명 |
---|---|---|
QRhiSwapChain::SDR | 0 | 백엔드 및 플랫폼에 따라 8비트 RGBA 또는 BGRA입니다. 특히 OpenGL ES의 경우 플랫폼이 8비트 미만을 제공할 수 있습니다(예: EGL과 QSurfaceFormat 이 565 또는 444 형식을 선택하기 때문에 - 이는 QRhi 의 통제 범위를 벗어납니다). 표준 동적 범위. QRhiSwapChain::sRGB 플래그 설정과 결합할 수 있습니다. |
QRhiSwapChain::HDRExtendedSrgbLinear | 1 | 16비트 플로트 RGBA, 높은 동적 범위, 확장된 선형 sRGB(scRGB) 색 공간. 여기에는 Rec. 709 원색(SDR/sRGB와 동일) 및 선형 색상이 포함됩니다. 디스플레이의 기본 색 공간(예: HDR10)으로의 변환은 윈도우 시스템에서 수행됩니다. Windows에서는 시스템 컴포저의 표준 색 공간이며 일반적으로 데스크톱 플랫폼에서 HDR 스왑체인에 권장되는 형식입니다. |
QRhiSwapChain::HDR10 | 2 | 10비트 부호 없는 int RGB 또는 2비트 알파, 하이 다이나믹 레인지, HDR10(Rec. 2020) 색 공간, ST2084 PQ 전송 함수가 있는 BGR. |
QRhiSwapChain::HDRExtendedDisplayP3Linear | 3 | 16비트 플로트 RGBA, 높은 다이나믹 레인지, 확장된 선형 디스플레이 P3 색 공간. iOS 및 VisionOS와 같은 플랫폼에서 HDR을 위한 기본 선택입니다. |
enum QRhiSwapChain::StereoTargetBuffer
스테레오스코픽 스왑체인에 사용할 백버퍼를 선택합니다.
Constant | 값 |
---|---|
QRhiSwapChain::LeftBuffer | 0 |
QRhiSwapChain::RightBuffer | 1 |
멤버 함수 문서
[pure virtual]
bool QRhiSwapChain::createOrResize()
아직 스왑체인을 생성하지 않은 경우 스왑체인 버퍼의 크기를 대상 서페이스의 현재 크기와 일치하도록 조정합니다. 대상 서페이스의 크기가 이전과 다를 때마다 이 함수를 호출합니다.
참고: destroy()는 일반적으로 QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed 에서 스왑체인을 완전히 해제해야 할 때만 호출하세요. 크기 조정을 수행하려면 createOrResize()를 호출하면 됩니다.
성공하면 true
, 그래픽 작업이 실패하면 false
을 반환합니다. 반환 값에 관계없이 destroy()를 호출하는 것은 항상 안전합니다.
[pure virtual]
QRhiCommandBuffer *QRhiSwapChain::currentFrameCommandBuffer()
이 스왑체인으로 beginFrame()이 호출되었다는 가정 하에 beginFrame - endFrame 블록 내에서 렌더링 명령과 리소스 업데이트를 기록할 수 있는 명령 버퍼를 반환합니다.
참고: 반환된 객체는 endFrame() 이후에도 유효하며, 다음 시작 프레임()까지 유효하지만 반환된 명령 버퍼는 그 이후에는 명령을 기록하는 데 사용해서는 안 됩니다. 그보다는 lastCompletedGpuTime()를 호출하여 해당 프레임(또는 이전 프레임) 동안 수집된 데이터를 쿼리하는 데 사용할 수 있습니다.
참고: 이 값을 캐시하여 프레임 간에 재사용해서는 안 됩니다. beginFrame ()가 다시 호출된 후에는 호출자가 반환된 객체를 보유해서는 안 됩니다. 대신 이 함수를 호출하여 명령 버퍼 객체를 다시 쿼리해야 합니다.
[pure virtual]
QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget()
스왑체인의 현재 백버퍼를 렌더링하기 위해 beginPass()와 함께 사용할 수 있는 렌더 타깃을 반환합니다. 이 스왑체인으로 beginFrame()이 호출된 QRhi::beginFrame() - QRhi::endFrame() 블록 내에서만 유효합니다.
참고: 값을 캐시하여 프레임 간에 재사용해서는 안 됩니다.
[virtual]
QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget(QRhiSwapChain::StereoTargetBuffer targetBuffer)
스왑체인의 왼쪽 또는 오른쪽 백버퍼에 렌더링하기 위해 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로, HDR에서 SDR로 등) 어떤 일이 발생하는지는 현재 잘 정의되어 있지 않으며 윈도우 시스템과 컴포저에 따라 크게 달라지며 플랫폼마다 동작이 달라질 수 있습니다. 현재 QRhi 는 createOrResize() 시점에 스왑체인의 관련 창이 속해 있던 디스플레이에 대한 유효한 데이터(사용 가능한 경우)만 hdrInfo()가 반환하도록 보장합니다.
QRhiSwapChainHdrInfo도 참조하세요 .
[pure virtual]
bool QRhiSwapChain::isFormatSupported(QRhiSwapChain::Format f)
지정된 스왑체인 형식( f )이 지원되면 참을 반환합니다. SDR은 항상 지원됩니다.
참고: createOrResize()와 독립적으로 호출할 수 있지만 window()가 이미 설정되어 있어야 합니다. 창을 설정하지 않고 호출하면 백엔드 및 플랫폼에 따라 예기치 않은 결과가 발생할 수 있습니다(모든 HDR 포맷의 경우 거짓일 가능성이 높음). HDR 포맷 지원은 일반적으로 특정 시점에 스왑체인의 관련 창이 속한 출력(화면)에 연결되기 때문입니다. 결과가 HDR 포맷에 대해 참이면, 그 사이에 창이 다른 화면으로 이동하지 않는 한 해당 포맷으로 스왑체인을 생성하는 데 성공할 것으로 예상됩니다.
이 함수의 주요 용도는 창이 이미 설정된 후 첫 번째 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 출력을 사용하도록 설정해야 합니다.
하이 다이나믹 레인지 출력에 대한 자세한 내용은 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(MSAA 4배) 또는 8(MSAA 8배)입니다.
sampleCount() 및 QRhi::supportedSampleCounts()도 참조하세요 .
void QRhiSwapChain::setWindow(QWindow *window)
window.
window()도 참조하세요 .
[pure virtual]
QSize QRhiSwapChain::surfacePixelSize()
창과 연관된 서페이스 또는 레이어의 크기를 반환합니다.
경고: QWindow::size() * QWindow::devicePixelRatio()
와 동일하다고 가정하지 마세요. 일부 그래픽 API 및 창 시스템 인터페이스(예: Vulkan)에서는 이론적으로 서페이스가 연결된 창과 다른 크기를 가정할 수 있습니다. 이러한 경우를 지원하기 위해 렌더링 로직은 항상 QRhiSwapChain 에서 보고된 크기를 기준으로 크기 파생 계산(예: 뷰포트)을 수행해야 하며 QWindow 에서 쿼리된 크기는 사용하지 않아야 합니다.
참고: window () 이상이 이미 설정되어 있는 경우 createOrResize() 앞에 호출할 수도 있습니다. currentPixelSize ()와 함께 사용하면 스왑체인의 크기를 조정해야 하는 시기를 감지할 수 있습니다. 그러나 기본 네이티브 오브젝트(표면, 레이어 등)의 크기는 "라이브"이기 때문에 이 함수가 호출될 때마다 원자성을 보장하지 않고 기본 구현에서 보고한 최신 값을 반환한다는 사실에 주의하세요. 따라서 이 함수를 사용하여 프레임에 사용되는 그래픽 리소스의 픽셀 크기를 결정하는 것은 강력히 권장하지 않습니다. 대신 원자적이며 createOrResize() 호출 간에 변경되지 않는 크기를 반환하는 currentPixelSize()를 사용하세요.
참고: 스왑체인의 컬러 버퍼와 함께 사용되는 뎁스 스텐실 버퍼의 경우 QRhiRenderBuffer:UsedWithSwapChainOnly 플래그가 제공하는 자동 크기 조정 및 리빌드 동작에 의존할 것을 강력히 권장합니다. QRhiRenderBuffer::setPixelSize ()에 전달할 수 있는 크기를 얻기 위해 이 함수를 통해 표면 크기를 쿼리하는 것은 위에서 설명한 원자성 부족으로 인해 문제가 발생할 수 있으므로 피하시기 바랍니다.
currentPixelSize()도 참조하세요 .
QWindow *QRhiSwapChain::window() const
현재 설정된 창을 반환합니다.
setWindow()도 참조하세요 .
© 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.