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
이 열거형 유형은 프레임버퍼 객체를 생성할 때 프레임버퍼 객체에 첨부된 깊이와 스텐실 버퍼를 구성하는 데 사용됩니다.
Constant | 값 | 설명 |
---|---|---|
QOpenGLFramebufferObject::NoAttachment | 0 | 프레임버퍼 오브젝트에 어태치먼트가 추가되지 않습니다. 뎁스 또는 스텐실 버퍼가 없는 프레임버퍼 오브젝트에 렌더링할 때는 OpenGL 뎁스 및 스텐실 테스트가 작동하지 않습니다. 이것이 기본값입니다. |
QOpenGLFramebufferObject::CombinedDepthStencil | 1 | GL_EXT_packed_depth_stencil 확장자가 있는 경우 뎁스와 스텐실 버퍼가 결합되어 첨부됩니다. 확장자가 없으면 뎁스 버퍼만 첨부됩니다. |
QOpenGLFramebufferObject::Depth | 2 | 깊이 버퍼는 프레임버퍼 객체에 첨부됩니다. |
attachment()도 참조하세요 .
enum QOpenGLFramebufferObject::FramebufferRestorePolicy
이 열거형 유형은 blitFramebuffer()를 호출할 때 프레임버퍼 바인딩 복원과 관련된 동작을 구성하는 데 사용됩니다.
Constant | 값 | 설명 |
---|---|---|
QOpenGLFramebufferObject::DontRestoreFramebufferBinding | 0 | 이전 프레임버퍼 바인딩을 복원하지 않습니다. 호출자는 필요에 따라 프레임버퍼 바인딩을 추적하고 설정할 책임이 있습니다. |
QOpenGLFramebufferObject::RestoreFramebufferBindingToDefault | 1 | 블릿 작업 후 기본 프레임버퍼를 바인딩합니다. |
QOpenGLFramebufferObject::RestoreFrameBufferBinding | 2 | 이전에 바인딩된 프레임버퍼를 복원합니다. 현재 바인딩된 프레임버퍼를 쿼리해야 하므로 잠재적으로 비용이 많이 들 수 있습니다. |
blitFramebuffer()도 참조하세요 .
멤버 함수 문서
[explicit]
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D)
OpenGL 프레임버퍼 객체를 생성하고 2D OpenGL 텍스처를 size 크기의 버퍼에 바인딩합니다. 텍스처는 프레임버퍼 객체의 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)
제공된 format 을 기반으로 주어진 size 의 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 구현에서 여러 렌더링 타깃을 지원하는 경우에만 작동합니다. 그렇지 않은 경우 이 함수는 추가 색상 어태치먼트를 추가하지 않습니다. 런타임에 QOpenGLFunctions::hasOpenGLFeature()를 QOpenGLFunctions::MultipleRenderTargets 과 함께 호출하여 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 직사각형에서 targetRect 프레임버퍼 객체의 target 직사각형으로 블릿합니다.
source 또는 target 이 0이면 기본 프레임버퍼가 각각 소스 또는 대상으로 프레임버퍼 객체 대신 사용됩니다.
hasOpenGLFramebufferBlit()가 참을 반환하지 않는 한 이 함수는 아무런 영향을 미치지 않습니다.
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)
이것은 오버로드된 함수입니다.
두 프레임버퍼 객체 사이를 블릿하고 이전 프레임버퍼 바인딩을 복원하는 데 편리한 오버로드입니다. 블릿프레임버퍼(대상, 대상Rect, 소스, 소스Rect, 버퍼, 필터, 읽기색상첨부색인, 그리기색상첨부색인, 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 이 참이면 이미지가 OpenGL 좌표에서 래스터 좌표로 반전됩니다. QOpenGLPaintDevice 와 함께 사용하는 경우 flipped 은 QOpenGLPaintDevice::paintFlipped()의 값과 반대여야 합니다.
반환된 이미지의 형식은 ARGB32 또는 RGB32를 미리 곱한 형식입니다. 후자는 내부 텍스처 포맷()이 GL_RGB
로 설정된 경우에만 사용됩니다. Qt 5.2부터는 (A)RGB32로 읽는 것이 지원되지 않을 때 이 함수는 미리 곱한 RGBA8888 또는 RGBx8888로 되돌아가며, 여기에는 OpenGL ES가 포함됩니다. 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
프레임버퍼 오브젝트 어태치먼트의 너비를 반환합니다.
© 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.