QRhiRenderBuffer 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 |
공개 유형
| struct | NativeRenderBuffer |
| enum | Flag { UsedWithSwapChainOnly } |
| flags | Flags |
| enum | Type { DepthStencil, Color } |
공개 함수
| virtual bool | create() = 0 |
| virtual bool | createFrom(QRhiRenderBuffer::NativeRenderBuffer src) |
| QRhiRenderBuffer::Flags | flags() const |
| QSize | pixelSize() const |
| int | sampleCount() const |
| void | setFlags(QRhiRenderBuffer::Flags f) |
| void | setPixelSize(const QSize &sz) |
| void | setSampleCount(int s) |
| void | setType(QRhiRenderBuffer::Type t) |
| QRhiRenderBuffer::Type | type() const |
재구현된 공개 함수
| virtual QRhiResource::Type | resourceType() const override |
상세 설명
렌더버퍼는 샘플링하거나 읽을 수 없지만, 경우에 따라 텍스처에 비해 몇 가지 장점이 있습니다:
DepthStencil 의 렌더 버퍼는 일부 API에서 지연 할당될 수 있으며, 일시적인 메모리를 백업으로 사용할 수 있습니다. 일부 플랫폼에서는 이로 인해 깊이/스텐실 버퍼가 물리적 백업 메모리를 전혀 사용하지 않을 수도 있습니다.
이러한 일시적인 특성에는 다음과 같은 결과가 따릅니다. 백엔드가 내부적으로 렌더 패스를 중단하고 다시 시작해야 하는 경우, ` DepthStencil ` 렌더 버퍼의 내용이 유지된다는 보장은 없습니다. Metal의 경우, 드로우 호출이 간접 명령 버퍼를 통해 구현될 때(드로우 횟수가 많은 ` drawIndexedIndirect()`의 경우)나 테셀레이션이 사용될 때 이러한 현상이 발생합니다. 이러한 호출 이후에 기록된 드로우는 내용을 잃어버린 깊이 버퍼를 기준으로 깊이 테스트를 수행하게 됩니다. 이 문제가 중요한 경우, 렌더 버퍼 대신 setDepthTexture()을 사용하여 깊이 또는 깊이-스텐실 QRhiTexture 를 연결하십시오. QRhiTextureRenderTarget::DoNotStoreDepthStencilContents 가 설정되어 있지 않은 한, 이는 중단 상황에서도 유지됩니다.
Color 렌더 버퍼는 QRhi::MultisampleTexture 가 지원되지 않더라도 QRhi::MultisampleRenderBuffer 가 지원될 수 있으므로 유용합니다.
백엔드에서 렌더 버퍼를 어떻게 구현하는지는 애플리케이션에 노출되지 않습니다. 어떤 경우에는 일반 텍스처로 뒷받침될 수도 있고, 다른 경우에는 다른 종류의 네이티브 리소스가 사용될 수도 있습니다.
QRhiSwapChain 의 색상 버퍼와 함께 깊이-스텐실 버퍼로(그리고 오직 그 용도로만) 사용되는 렌더 버퍼에는 UsedWithSwapChainOnly 플래그가 설정되어야 합니다. 이는 두 가지 목적을 달성합니다. 첫째, 백엔드와 기본 API에 따라 이러한 버퍼가 더 효율적일 수 있으며, 둘째, ` QRhi `는 컬러 버퍼에 맞춰 크기를 자동으로 조정하는 기능을 제공하므로, 이러한 렌더버퍼의 경우 ` setPixelSize()` 및 ` create()`를 호출할 필요가 없습니다.
참고: 이는 호환성 보장이 제한적인 RHI API입니다. 자세한 내용은 QRhi 를 참조하십시오.
멤버 유형 문서
enum QRhiRenderBuffer::Flag
flags QRhiRenderBuffer::Flags
| 상수 | 값 | 설명 |
|---|---|---|
QRhiRenderBuffer::UsedWithSwapChainOnly | 1 << 0 | DepthStencil 렌더 버퍼의 경우, 이 플래그가 설정되면 해당 렌더 버퍼가 QRhiSwapChain 와 함께 사용될 때만 활용되며, 그 외의 방식으로는 절대 사용되지 않음을 나타냅니다. 이를 통해 크기가 자동으로 조정되고 리소스가 재구축되므로, 이 플래그가 설정된 상태에서는 setPixelSize() 또는 create()를 호출할 필요가 없습니다. 이 플래그 값은 백엔드별 동작을 유발할 수도 있습니다. 예를 들어 OpenGL의 경우, 별도의 윈도우 시스템 인터페이스 API(EGL, GLX 등)가 사용되는 환경에서 이 플래그는 특히 중요합니다. 이는 QSurfaceFormat 에서 요청한 대로 윈도우 시스템에서 이미 깊이/스텐실 버퍼를 제공하기 때문에, 실제 렌더버퍼 리소스가 생성되는 것을 방지하기 때문입니다. |
Flags 유형은 QFlags<Flag>에 대한 typedef입니다. 이 유형은 Flag 값들의 OR 조합을 저장합니다.
enum QRhiRenderBuffer::Type
렌더 버퍼의 유형을 지정합니다
| 상수 | 값 | 설명 |
|---|---|---|
QRhiRenderBuffer::DepthStencil | 0 | 깊이/스텐실 결합 |
QRhiRenderBuffer::Color | 1 | 색상 |
멤버 함수 설명서
[pure virtual] bool QRhiRenderBuffer::create()
해당 네이티브 그래픽 리소스를 생성합니다. 이전에 destroy() 호출 없이 create()를 실행하여 이미 리소스가 존재하는 경우, 먼저 destroy()가 암시적으로 호출됩니다.
성공 시 ` true `를 반환하고, 그래픽 작업이 실패한 경우 ` false `를 반환합니다. 반환 값과 관계없이 ` destroy()`를 호출하는 것은 항상 안전합니다.
[virtual] bool QRhiRenderBuffer::createFrom(QRhiRenderBuffer::NativeRenderBuffer src)
create()와 유사하지만, 새로운 네이티브 렌더버퍼 객체가 생성되지 않는다는 점이 다릅니다. 대신, src 로 지정된 네이티브 렌더버퍼 객체가 사용됩니다.
이를 통해 외부 그래픽 엔진에서 기존 렌더버퍼 객체(그래픽 API에 따라 동일한 디바이스 또는 공유 컨텍스트에 속해야 함)를 가져올 수 있습니다.
참고: 현재이 기능은 OpenGL에만 적용됩니다. 이 함수는 EGLImageKHR과 같은 특수한 외부 객체에 바인딩된 렌더버퍼 객체를 가져올 수 있도록 하기 위해서만 존재합니다. 애플리케이션이 glEGLImageTargetRenderbufferStorageOES 호출을 수행하면, 렌더 버퍼 객체를 이 함수에 전달하여 래핑 QRhiRenderBuffer 를 생성할 수 있으며, 이 는 QRhiTextureRenderTarget 에 색상 첨부 파일로 전달되어 EGLImage로 렌더링할 수 있게 됩니다.
참고: pixelSize(), sampleCount() 및 flags()은 여전히 올바르게 설정되어야 합니다. QRhi::newRenderBuffer()에 잘못된 크기나 기타 값을 전달한 후, 네이티브 렌더버퍼 객체만으로도 이러한 값을 추론할 수 있을 것이라고 기대하며 createFrom()을 호출하는 것은 잘못된 방법 이며 문제를 야기할 수 있습니다.
참고: QRhiRenderBuffer 는 네이티브 객체의 소유권을 인수하지 않으며, destroy()는 해당 객체를 해제하지 않습니다.
참고: 이 함수는 QRhi::RenderBufferImport 기능이 supported 로 보고된 경우에만 구현됩니다. 그렇지 않은 경우, 이 함수는 아무 작업도 수행하지 않으며 반환 값은 false 입니다.
성공 시 true 를 반환하고, 지원되지 않을 경우 false 를 반환합니다.
QRhiRenderBuffer::Flags QRhiRenderBuffer::flags() const
플래그를 반환합니다.
setFlags()도 참조하십시오 .
QSize QRhiRenderBuffer::pixelSize() const
픽셀 크기를 반환합니다.
setPixelSize()도 참조하십시오 .
[override virtual] QRhiResource::Type QRhiRenderBuffer::resourceType() const
QRhiResource::resourceType() const를 재구현합니다.
리소스 유형을 반환합니다.
int QRhiRenderBuffer::sampleCount() const
샘플 수를 반환합니다. 1은 멀티샘플 앤티앨리어싱이 적용되지 않음을 의미합니다.
setSampleCount()도 참조하십시오 .
void QRhiRenderBuffer::setFlags(QRhiRenderBuffer::Flags f)
플래그를 f 로 설정합니다.
flags()도 참조하십시오 .
void QRhiRenderBuffer::setPixelSize(const QSize &sz)
크기(픽셀 단위)를 sz 로 설정합니다.
pixelSize()도 참조하십시오 .
void QRhiRenderBuffer::setSampleCount(int s)
샘플 수를 s 로 설정합니다.
sampleCount()도 참조하십시오 .
void QRhiRenderBuffer::setType(QRhiRenderBuffer::Type t)
유형을 ` t`로 설정합니다.
type()도 참조하십시오 .
QRhiRenderBuffer::Type QRhiRenderBuffer::type() const
렌더 버퍼 유형을 반환합니다.
setType()도 참조하십시오 .
© 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.