QOpenGLFramebufferObject Class
QOpenGLFramebufferObject 클래스는 OpenGL 프레임버퍼 객체를 캡슐화합니다. 더 보기...
| 헤더: | #include <QOpenGLFramebufferObject> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
- 상속된 멤버를 포함한 모든 멤버 목록
- QOpenGLFramebufferObject는 3D 렌더링의 일부입니다.
공개 유형
| enum | Attachment { NoAttachment, CombinedDepthStencil, Depth } |
| enum | FramebufferRestorePolicy { DontRestoreFramebufferBinding, RestoreFramebufferBindingToDefault, RestoreFrameBufferBinding } |
공개 함수
| QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D) | |
| QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format) | |
| QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D) | |
| QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format) | |
| QOpenGLFramebufferObject(const QSize &size, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0) | |
| QOpenGLFramebufferObject(int width, int height, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0) | |
| virtual | ~QOpenGLFramebufferObject() |
| void | addColorAttachment(const QSize &size, GLenum internalFormat = 0) |
| void | addColorAttachment(int width, int height, GLenum internalFormat = 0) |
| QOpenGLFramebufferObject::Attachment | attachment() const |
| bool | bind() |
| QOpenGLFramebufferObjectFormat | format() const |
| GLuint | handle() const |
| int | height() const |
| bool | isBound() const |
| bool | isValid() const |
| bool | release() |
| void | setAttachment(QOpenGLFramebufferObject::Attachment attachment) |
| QSize | size() const |
| QList<QSize> | sizes() const |
| GLuint | takeTexture() |
| GLuint | takeTexture(int colorAttachmentIndex) |
| GLuint | texture() const |
| QList<GLuint> | textures() const |
| QImage | toImage(bool flipped = true) const |
| QImage | toImage(bool flipped, int colorAttachmentIndex) const |
| int | width() const |
정적 공용 멤버
| bool | bindDefault() |
| void | blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex, QOpenGLFramebufferObject::FramebufferRestorePolicy restorePolicy) |
| void | blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST) |
| void | blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST) |
| void | blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex) |
| bool | hasOpenGLFramebufferBlit() |
| bool | hasOpenGLFramebufferObjects() |
상세 설명
QOpenGLFramebufferObject 클래스는 GL_EXT_framebuffer_object 확장에 의해 정의된 OpenGL 프레임버퍼 객체를 캡슐화합니다. 이 클래스는 QOpenGLPaintDevice 을 사용하여 QPainter 로 페인팅하거나, 네이티브 OpenGL 호출을 통해 렌더링할 수 있는 렌더링 표면을 제공합니다. 이 표면은 바인딩되어 사용자 고유의 OpenGL 드로잉 코드에서 일반 텍스처로 사용될 수 있습니다. 기본적으로 QOpenGLFramebufferObject 클래스는 2D OpenGL 텍스처( GL_TEXTURE_2D 타겟 사용)를 생성하며, 이는 내부 렌더링 타겟으로 사용됩니다.
QOpenGLFramebufferObject를 생성할 때는 유효한 OpenGL 컨텍스트가 있어야 하며, 그렇지 않으면 초기화가 실패합니다.
QPainter 가 올바르게 렌더링되도록 하려면, CombinedDepthStencil 어태치먼트를 사용하여 QOpenGLFrameBufferObject 인스턴스를 생성하십시오. QPainter 를 사용하여 그릴 때 프리미티브에 앤티앨리어싱이 적용되려면 픽셀당 하나 이상의 샘플을 가진 QOpenGLFramebufferObject를 생성해야 합니다. 멀티샘플 프레임버퍼 객체를 생성하려면 QOpenGLFramebufferObjectFormat 매개변수를 받는 생성자 중 하나를 사용하고, QOpenGLFramebufferObjectFormat::samples() 속성을 0이 아닌 값으로 설정해야 합니다.
멀티샘플 프레임버퍼 객체의 경우 컬러 렌더 버퍼가 생성되며, 그렇지 않은 경우에는 지정된 텍스처 타깃을 가진 텍스처가 생성됩니다. 컬러 렌더 버퍼나 텍스처는 지정된 내부 형식을 가지며, 프레임버퍼 객체 내의 GL_COLOR_ATTACHMENT0 어태치먼트에 바인딩됩니다.
OpenGL 구현체가 이를 지원하는 경우, 다중 렌더 타겟도 지원됩니다. 이 경우 여러 텍스처(또는 멀티샘플링의 경우 렌더 버퍼)가 존재하게 되며, 각각은 GL_COLOR_ATTACHMENT0, 1, 2 등에 연결됩니다.
멀티샘플링이 활성화된 프레임버퍼 객체를 텍스처로 사용하려면, 먼저 QOpenGLContext::blitFramebuffer()를 사용하여 해당 객체의 내용을 일반 프레임버퍼 객체로 복사해야 합니다.
별도의 스레드에서 QPainter 및 QOpenGLPaintDevice 를 사용하여 QOpenGLFramebufferObject에 그리기를 수행할 수 있습니다.
멤버 유형 설명서
enum QOpenGLFramebufferObject::Attachment
이 열거형 타입은 프레임버퍼 객체가 생성될 때 해당 객체에 연결될 딥 버퍼와 스텐실 버퍼를 구성하는 데 사용됩니다.
| 상수 | 값 | 설명 |
|---|---|---|
QOpenGLFramebufferObject::NoAttachment | 0 | 프레임버퍼 객체에 부착물이 추가되지 않습니다. 깊이 또는 스텐실 버퍼가 없는 프레임버퍼 객체로 렌더링할 경우 OpenGL 깊이 및 스텐실 테스트가 작동하지 않는다는 점에 유의하십시오. 이 값은 기본값입니다. |
QOpenGLFramebufferObject::CombinedDepthStencil | 1 | GL_EXT_packed_depth_stencil 확장 기능이 있는 경우, 결합된 깊이 및 스텐실 버퍼가 연결됩니다. 확장 기능이 없는 경우, 깊이 버퍼만 연결됩니다. |
QOpenGLFramebufferObject::Depth | 2 | 프레임버퍼 객체에 깊이 버퍼가 연결됩니다. |
attachment()도 참조하십시오 .
enum QOpenGLFramebufferObject::FramebufferRestorePolicy
이 열거형 유형은 ` blitFramebuffer()`을 호출할 때 프레임버퍼 바인딩을 복원하는 것과 관련된 동작을 구성하는 데 사용됩니다.
| 상수 | 값 | 상수값 |
|---|---|---|
QOpenGLFramebufferObject::DontRestoreFramebufferBinding | 0 | 이전 프레임버퍼 바인딩을 복원하지 않습니다. 호출자는 필요에 따라 프레임버퍼 바인딩을 추적하고 설정할 책임이 있습니다. |
QOpenGLFramebufferObject::RestoreFramebufferBindingToDefault | 1 | 블릿 작업 후 기본 프레임버퍼를 바인딩합니다. |
QOpenGLFramebufferObject::RestoreFrameBufferBinding | 2 | 이전에 바인딩된 프레임버퍼를 복원합니다. 현재 바인딩된 프레임버퍼를 조회해야 하므로 이 작업은 성능에 부담을 줄 수 있습니다. |
blitFramebuffer()도 참조하십시오 .
멤버 함수 문서
[explicit] QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D)
OpenGL 프레임버퍼 객체를 생성하고, size 크기의 버퍼에 2D OpenGL 텍스처를 바인딩합니다. 이 텍스처는 프레임버퍼 객체 내의 GL_COLOR_ATTACHMENT0 타깃에 바인딩됩니다.
target 매개변수는 OpenGL 텍스처 타깃을 지정하는 데 사용됩니다. 기본 타깃은 GL_TEXTURE_2D 입니다. OpenGL 2.0 이상을 사용하지 않는 한, GL_TEXTURE_2D 텍스처의 너비와 높이는 2의 거듭제곱이어야 한다는 점(예: 256x512)을 유의하십시오.
기본적으로 깊이 버퍼와 스텐실 버퍼는 연결되어 있지 않습니다. 이 동작은 오버로드된 생성자 중 하나를 사용하여 전환할 수 있습니다.
기본 내부 텍스처 형식은 데스크톱 OpenGL의 경우 GL_RGBA8 이며, OpenGL/ES의 경우 GL_RGBA 입니다.
QOpenGLFramebufferObject를 생성할 때 최신 OpenGL 컨텍스트가 설정되어 있어야 하며, 그렇지 않으면 초기화가 실패합니다.
size(), texture(), attachment()도 참조하십시오 .
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format)
지정된 ` size `에 대해, 제공된 ` format`을 기반으로 OpenGL 프레임버퍼 객체를 생성합니다.
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D)
OpenGL 프레임버퍼 객체를 생성하고, 지정된 width 및 height 의 버퍼에 2D OpenGL 텍스처를 바인딩합니다.
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format)
제공된 ` format`을 기반으로, 지정된 ` width ` 및 ` height `의 OpenGL 프레임버퍼 객체를 생성합니다.
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)
OpenGL 프레임버퍼 객체를 생성하고, 지정된 size 의 버퍼에 텍스처를 바인딩합니다.
attachment 매개변수는 깊이/스텐실 버퍼 구성을, target 는 텍스처 타깃을, internalFormat 는 내부 텍스처 형식을 설명합니다. 기본 텍스처 타깃은 GL_TEXTURE_2D 이며, 기본 내부 형식은 데스크톱 OpenGL의 경우 GL_RGBA8 이고 OpenGL/ES의 경우 GL_RGBA 입니다.
size(), texture(), attachment()도 참조하십시오 .
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)
OpenGL 프레임버퍼 객체를 생성하고, 지정된 width 및 height 의 버퍼에 텍스처를 바인딩합니다.
attachment 매개변수는 깊이/스텐실 버퍼 구성을, target 는 텍스처 타깃을, internalFormat 는 내부 텍스처 형식을 설명합니다. 기본 텍스처 타깃은 GL_TEXTURE_2D 이며, 기본 내부 형식은 데스크톱 OpenGL의 경우 GL_RGBA8 이고 OpenGL/ES의 경우 GL_RGBA 입니다.
size(), texture() 및 attachment()도 참조하십시오 .
[virtual noexcept] QOpenGLFramebufferObject::~QOpenGLFramebufferObject()
프레임버퍼 객체를 삭제하고 할당된 모든 리소스를 해제합니다.
void QOpenGLFramebufferObject::addColorAttachment(const QSize &size, GLenum internalFormat = 0)
size 너비와 높이를 가진 추가 텍스처 또는 렌더 버퍼를 생성하고 연결합니다.
GL_COLOR_ATTACHMENT0에는 항상 어태치먼트가 존재합니다. GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, ...에 추가 어태치먼트를 설정하려면 이 함수를 호출하십시오.
internalFormat 가 0 가 아닐 경우, 이는 텍스처 또는 렌더 버퍼의 내부 형식을 지정합니다. 그렇지 않은 경우 GL_RGBA 또는 GL_RGBA8이 기본값으로 사용됩니다.
참고: 이 기능은 OpenGL 구현에서 다중 렌더 타깃(MRT)을 지원하는 경우에만 작동합니다. 그렇지 않은 경우, 이 함수는 추가 색상 어태치먼트를 추가하지 않습니다. 런타임에 QOpenGLFunctions::MultipleRenderTargets 을 인수로 전달하여 QOpenGLFunctions::hasOpenGLFeature()를 호출하면 MRT 지원 여부를 확인할 수 있습니다.
참고: 색상 어태치먼트의 내부형식은 다를 수 있으나, 드라이버에 따라 지원되는 조합에 제한이 있을 수 있습니다.
참고: 색상 어태치먼트의크기는 다를 수 있지만, OpenGL 사양에 따라 렌더링은 모든 어태치먼트가 들어갈 수 있는 영역으로 제한됩니다. 그러나 일부 드라이버는 이 점에서 사양을 완전히 준수하지 않을 수 있습니다.
void QOpenGLFramebufferObject::addColorAttachment(int width, int height, GLenum internalFormat = 0)
width 크기와 height 크기의 추가 텍스처 또는 렌더 버퍼를 생성하고 연결합니다.
internalFormat 가 0 와 다를 경우, 이는 텍스처 또는 렌더 버퍼의 내부 형식을 지정합니다. 그렇지 않은 경우 GL_RGBA 또는 GL_RGBA8이 기본값으로 사용됩니다.
이 함수는 오버로드된 함수입니다.
QOpenGLFramebufferObject::Attachment QOpenGLFramebufferObject::attachment() const
이 프레임버퍼 객체에 연결된 깊이 버퍼와 스텐실 버퍼의 상태를 반환합니다.
setAttachment()도 참조하십시오 .
bool QOpenGLFramebufferObject::bind()
기본으로 제공되는 윈도우 시스템의 프레임버퍼에서 이 프레임버퍼 객체로 렌더링을 전환합니다. 성공 시 true 를 반환하고, 그렇지 않으면 false를 반환합니다.
참고: takeTexture()가 호출된경우 , 새로운 텍스처가 생성되어 프레임버퍼 객체에 연결됩니다. 이 작업은 처리 비용이 높을 수 있으며 컨텍스트 상태(현재 바인딩된 텍스처)를 변경합니다.
release()도 참조하십시오 .
[static] bool QOpenGLFramebufferObject::bindDefault()
렌더링을 기본값인 윈도우 시스템에서 제공하는 프레임버퍼로 다시 전환합니다. 성공 시 true 를 반환하고, 그렇지 않은 경우 false를 반환합니다.
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex, QOpenGLFramebufferObject::FramebufferRestorePolicy restorePolicy)
source 프레임버퍼 객체의 sourceRect 사각형에서 target 프레임버퍼 객체의 targetRect 사각형으로 블릿을 수행합니다.
source 또는 target 의 값이 0인 경우, 소스 또는 대상로서 프레임버퍼 객체 대신 기본 프레임버퍼가 사용됩니다.
hasOpenGLFramebufferBlit()가 true를 반환하지 않는 한 이 함수는 아무런 효과도 없습니다.
buffers 매개 변수는 GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT 및 GL_STENCIL_BUFFER_BIT 의 임의의 조합으로 구성된 마스크여야 합니다. 소스 및 대상 버퍼 모두에 존재하지 않는 버퍼 유형은 무시됩니다.
sourceRect 와 targetRect 의 사각형 크기는 서로 다를 수 있습니다. 이 경우 buffers 에는 GL_DEPTH_BUFFER_BIT 나 GL_STENCIL_BUFFER_BIT 가 포함되어서는 안 됩니다. filter 매개변수는 GL_LINEAR 또는 GL_NEAREST 로 설정되어야 하며, 크기 조정이 수행될 때 선형 보간을 사용할지, 최인접 보간을 사용할지를 지정합니다.
source 가 target 와 같을 경우, 동일한 버퍼 내에서 복사가 수행됩니다. 소스 및 대상 사각형이 겹치면서 크기가 다른 경우 결과는 정의되지 않습니다. 또한 프레임버퍼 객체 중 하나라도 멀티샘플 프레임버퍼인 경우, 크기도 동일해야 합니다.
참고: 가위테스트가 활성화된 경우 블릿 영역이 제한됩니다.
여러 렌더 타겟이 사용 중인 경우, ` readColorAttachmentIndex ` 및 ` drawColorAttachmentIndex `는 소스 및 대상 프레임버퍼 내 색상 어태치먼트의 인덱스를 지정합니다.
restorePolicy 는 이 함수를 호출하기 전에 바인딩되었던 프레임버퍼를 복원할지, 반환하기 전에 기본 프레임버퍼를 바인딩할지, 아니면 호출자가 바인딩된 프레임버퍼를 추적하고 설정할 책임을 질지 여부를 결정합니다. 이전 프레임버퍼를 복원하는 작업은 glGetIntegerv 호출로 인해 상대적으로 비용이 많이 들 수 있으며, 일부 OpenGL 드라이버에서는 이로 인해 파이프라인 정지가 발생할 수 있습니다.
hasOpenGLFramebufferBlit()도 참조하십시오 .
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)
두 프레임버퍼 객체 간에 블릿을 수행하는 편의 오버로드.
이 함수는 오버로드된 함수입니다.
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)
* 두 프레임버퍼 객체 간에 데이터를 복사하기 위한 편의 오버로드.
이 함수는 오버로드된 함수입니다.
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex)
두 프레임버퍼 객체 간에 블릿을 수행하고 이전 프레임버퍼 바인딩을 복원하는 편리한 오버로드 함수입니다. blitFramebuffer(target, targetRect, source, sourceRect, buffers, filter, readColorAttachmentIndex, drawColorAttachmentIndex, RestoreFrameBufferBinding)를 호출하는 것과 동일합니다.
이 함수는 오버로드된 함수입니다.
QOpenGLFramebufferObjectFormat QOpenGLFramebufferObject::format() const
이 프레임버퍼 객체의 형식을 반환합니다.
GLuint QOpenGLFramebufferObject::handle() const
이 프레임버퍼 객체에 대한 OpenGL 프레임버퍼 객체 핸들( glGenFrameBuffersEXT() 함수에서 반환된 것)을 반환합니다. 이 핸들을 사용하여 새로운 이미지나 버퍼를 프레임버퍼에 연결할 수 있습니다. 이러한 객체의 정리 및 해체는 사용자가 직접 수행해야 합니다.
[static] bool QOpenGLFramebufferObject::hasOpenGLFramebufferBlit()
이 시스템에 OpenGL GL_EXT_framebuffer_blit 확장이 존재하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.
blitFramebuffer()도 참조하십시오 .
[static] bool QOpenGLFramebufferObject::hasOpenGLFramebufferObjects()
이 시스템에 OpenGL GL_EXT_framebuffer_object 확장이 존재하는 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.
int QOpenGLFramebufferObject::height() const
프레임버퍼 객체 첨부 항목의 높이를 반환합니다.
bool QOpenGLFramebufferObject::isBound() const
프레임버퍼 객체가 현재 컨텍스트에 바인딩되어 있으면 ` true `를 반환하고, 그렇지 않으면 `false`를 반환합니다.
bool QOpenGLFramebufferObject::isValid() const
프레임버퍼 객체가 유효한 경우 ` true `를 반환합니다.
초기화 과정이 실패하거나, 사용자가 유효하지 않은 버퍼를 프레임버퍼 객체에 연결하거나, 텍스처 타깃이 GL_TEXTURE_2D 인 경우 텍스처 크기로 2의 거듭제곱이 아닌 너비/높이가 지정되면 프레임버퍼가 유효하지 않게 될 수 있습니다. OpenGL 버전이 2.0 이상이거나 GL_ARB_texture_non_power_of_two 확장 기능이 있는 경우에는 2의 거듭제곱이 아닌 너비/높이에 대한 제한이 적용되지 않습니다.
또한, 프레임버퍼가 생성된 QOpenGLContext 이 소멸되고 프레임버퍼의 소유권을 인수할 수 있는 다른 공유 컨텍스트가 없는 경우에도 프레임버퍼가 무효화될 수 있습니다.
bool QOpenGLFramebufferObject::release()
렌더링을 기본값인 윈도우 시스템에서 제공하는 프레임버퍼로 다시 전환합니다. 성공 시 true 를 반환하고, 그렇지 않은 경우 false를 반환합니다.
bind()도 참조하십시오 .
void QOpenGLFramebufferObject::setAttachment(QOpenGLFramebufferObject::Attachment attachment)
프레임버퍼 객체의 부착물을 ` attachment`로 설정합니다.
이 함수는 필요에 따라 깊이 버퍼 및 스텐실 버퍼 어태치먼트를 해제하거나 다시 연결하는 데 사용할 수 있습니다.
참고: 이 함수는 현재 프레임버퍼 바인딩을 변경합니다.
attachment()도 참조하십시오 .
QSize QOpenGLFramebufferObject::size() const
이 프레임버퍼 객체에 연결된 색상 및 깊이/스텐실 어태치먼트의 크기를 반환합니다.
QList<QSize> QOpenGLFramebufferObject::sizes() const
이 프레임버퍼 객체에 연결된 모든 색상 첨부 객체의 크기를 반환합니다.
GLuint QOpenGLFramebufferObject::takeTexture()
이 프레임버퍼 객체에 연결된 텍스처의 텍스처 ID를 반환합니다. 텍스처의 소유권은 호출자에게 이전됩니다.
프레임버퍼 객체가 현재 바인딩된 상태라면, 암시적으로 ` release()`가 수행됩니다. 다음에 ` bind()`를 호출할 때 새로운 텍스처가 생성됩니다.
멀티샘플 프레임버퍼 객체가 사용되는 경우, 텍스처가 없으므로 이 함수의 반환 값은 유효하지 않습니다. 마찬가지로, 불완전한 프레임버퍼 객체도 0을 반환합니다.
texture(), bind(), release()도 참조하십시오 .
GLuint QOpenGLFramebufferObject::takeTexture(int colorAttachmentIndex)
이 프레임버퍼 객체의 색상 어태치먼트 중 인덱스 colorAttachmentIndex 에 연결된 텍스처의 텍스처 ID를 반환합니다. 텍스처의 소유권은 호출자에게 이전됩니다.
colorAttachmentIndex 가 0 일 경우, 동작은 이 함수의 매개변수가 없는 형태와 동일합니다.
프레임버퍼 객체가 현재 바인딩된 상태라면, 묵시적인 ` release()` 호출이 수행됩니다. 다음 ` bind()` 호출 시에는 새로운 텍스처가 생성됩니다.
멀티샘플 프레임버퍼 객체가 사용되는 경우, 텍스처가 존재하지 않으므로 이 함수의 반환 값은 유효하지 않습니다. 마찬가지로, 불완전한 프레임버퍼 객체의 경우에도 0을 반환합니다.
이 함수는 오버로드된 함수입니다.
GLuint QOpenGLFramebufferObject::texture() const
이 프레임버퍼 객체에 기본 렌더링 타깃으로 연결된 텍스처의 텍스처 ID를 반환합니다. 이 텍스처 ID는 사용자 자신의 OpenGL 코드에서 일반 텍스처로 바인딩할 수 있습니다.
멀티샘플 프레임버퍼 객체를 사용하는 경우, 이 함수에서 반환되는 값은 유효하지 않습니다.
여러 텍스처가 연결된 경우, 반환 값은 첫 번째 텍스처의 ID입니다.
takeTexture() 및 textures()도 참조하십시오 .
QList<GLuint> QOpenGLFramebufferObject::textures() const
연결된 모든 텍스처의 텍스처 ID를 반환합니다.
멀티샘플 프레임버퍼 객체가 사용되는 경우, 빈 벡터가 반환됩니다.
takeTexture() 및 texture()도 참조하십시오 .
QImage QOpenGLFramebufferObject::toImage(bool flipped = true) const
이 프레임버퍼 객체의 내용을 ` QImage` 형식으로 반환합니다.
flipped 가 true인 경우, 이미지는 OpenGL 좌표계에서 래스터 좌표계로 변환됩니다. QOpenGLPaintDevice 와 함께 사용할 경우, flipped 는 QOpenGLPaintDevice::paintFlipped()의 반대가 되어야 합니다.
반환되는 이미지의 형식은 사전 곱셈된 ARGB32 또는 RGB32입니다. 후자는 internalTextureFormat()이 GL_RGB 로 설정된 경우에만 사용됩니다. Qt 5.2부터는 (A)RGB32 읽기가 지원되지 않을 경우(OpenGL ES 포함), 이 함수는 미리 곱해진 RGBA8888 또는 RGBx8888로 대체됩니다. Qt 5.4부터는 내부 형식이 RGB10_A2인 경우 A2BGR30 이미지가 반환되며, Qt 5.12부터는 내부 형식이 RGBA16인 경우 RGBA64 이미지가 반환됩니다.
프레임버퍼에서의 렌더링이 사전 곱해진 알파를 고려하지 않고 수행된 경우, 사전 곱해지지 않은 형식을 가진 래퍼 QImage 를 생성하십시오. 이는 QImage::save()와 같은 연산을 수행하기 전에 필수적인 단계입니다. 그렇지 않으면, 애초에 사전 곱해지지 않았음에도 불구하고 이미지 데이터가 사전 곱해지지 않은 상태로 변환될 수 있기 때문입니다. 픽셀 데이터를 복사하지 않고 이러한 래퍼를 생성하려면 다음을 수행하십시오.
QImage fboImage(fbo.toImage());
QImage image(fboImage.constBits(), fboImage.width(), fboImage.height(), QImage::Format_ARGB32);다중 샘플링 프레임버퍼 객체의 경우, 샘플은 GL_EXT_framebuffer_blit 확장을 사용하여 해결됩니다. 이 확장을 사용할 수 없는 경우, 반환된 이미지의 내용은 정의되지 않습니다.
단일 샘플링 프레임버퍼의 경우, 내용은 glReadPixels 를 통해 가져옵니다. 이는 잠재적으로 비용이 많이 들고 비효율적인 작업입니다. 따라서 이 함수는 가능한 한 드물게 사용하는 것이 좋습니다.
QOpenGLPaintDevice::paintFlipped()도 참조하십시오 .
QImage QOpenGLFramebufferObject::toImage(bool flipped, int colorAttachmentIndex) const
이 프레임버퍼 객체의 인덱스 colorAttachmentIndex 에 해당하는 색상 어태치먼트의 내용을 ` QImage` 형식으로 반환합니다. 이 메서드는 ` flipped `가 ` true`로 설정된 경우, 이미지를 OpenGL 좌표계에서 래스터 좌표계로 변환합니다.
참고: 이 오버로드는 OpenGL 구현에서 여러 렌더 타겟을 지원하는 경우에만 완전히 작동합니다. 그렇지 않은 경우, 하나의 컬러 어태치먼트만 설정됩니다.
이 함수는 오버로드된 함수입니다.
int QOpenGLFramebufferObject::width() const
프레임버퍼 객체 연결 항목의 너비를 반환합니다.
© 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.