QOpenGLVertexArrayObject Class

QOpenGLVertexArrayObject 클래스는 OpenGL 버텍스 배열 객체를 래핑합니다. 더 보기...

Header: #include <QOpenGLVertexArrayObject>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake: QT += opengl
상속합니다: QObject

공용 유형

class Binder

공용 함수

QOpenGLVertexArrayObject(QObject *parent = nullptr)
virtual ~QOpenGLVertexArrayObject()
void bind()
bool create()
void destroy()
bool isCreated() const
GLuint objectId() const
void release()

상세 설명

버텍스 배열 객체(VAO)는 OpenGL 파이프라인에 버텍스별 어트리뷰트 데이터를 지정하는 데 필요한 상태를 캡슐화하는 OpenGL 컨테이너 객체입니다. 다시 말해, VAO는 버퍼 객체( QOpenGLBuffer 참조)의 상태와 관련 상태(예: 버텍스 속성 디바이더)를 기억합니다. 이를 통해 씬의 다양한 "오브젝트"를 렌더링하기 위해 OpenGL 버퍼 상태 간에 매우 쉽고 효율적으로 전환할 수 있습니다. QOpenGLVertexArrayObject 클래스는 OpenGL VAO를 둘러싼 얇은 래퍼입니다.

데스크톱의 경우 VAO는 OpenGL 3.0 이상에서 핵심 기능으로 지원되며, 이전 버전에서는 GL_ARB_vertex_array_object에서 지원됩니다. OpenGL ES 2에서는 선택적 확장 기능인 GL_OES_vertex_array_object를 통해 VAO를 제공합니다. QOpenGLContext::surfaceFormat()으로 OpenGL 버전을 확인하고 QOpenGLContext::hasExtension()로 확장이 있는지 확인할 수 있습니다.

다른 Qt OpenGL 클래스와 마찬가지로 QOpenGLVertexArrayObject에는 create() 함수가 있어 기본 OpenGL 객체를 생성할 수 있습니다. 이는 개발자가 당시 유효한 현재 OpenGL 컨텍스트가 있는지 확인할 수 있도록 하기 위한 것입니다.

VAO를 성공적으로 생성한 후 일반적인 사용 패턴은 다음과 같습니다:

  • 장면 초기화 함수에서 각 시각적 객체에 대해:
    • VAO를 바인딩합니다.
    • 이 시각적 객체에 대한 버텍스 데이터 상태(버텍스, 노멀, 텍스처 좌표 등)를 설정합니다.
    • VAO를 바인딩 해제(release())합니다.
  • 렌더링 함수에서 각 시각적 객체에 대해 바인딩을 해제합니다:
    • VAO(및 필요한 경우 셰이더 프로그램)를 바인딩합니다.
    • glDraw*() 함수 호출
    • VAO 바인딩 해제(release())

렌더 함수에서 VAO를 바인딩하는 작업은 초기화 단계에서 설정된 모든 버텍스 데이터 상태를 복원하는 효과가 있습니다. 이러한 방식으로 VAO를 설정할 때 많은 양의 상태를 설정하고 렌더링할 오브젝트의 상태 집합 간에 효율적으로 전환할 수 있습니다. 또한 VAO를 사용하면 OpenGL 드라이버가 버텍스 데이터의 유효성 검사를 간소화할 수 있습니다.

참고: 버텍스 배열 객체는 다른 모든 OpenGL 컨테이너 객체와 마찬가지로 해당 객체가 생성된 컨텍스트에 따라 다르며 컨텍스트 그룹 간에 공유할 수 없습니다.

QOpenGLVertexArrayObject::BinderQOpenGLBuffer참조하세요 .

멤버 함수 문서

[explicit] QOpenGLVertexArrayObject::QOpenGLVertexArrayObject(QObject *parent = nullptr)

주어진 parent 으로 QOpenGLVertexArrayObject를 생성합니다. 사용하기 전에 유효한 OpenGL 컨텍스트로 create()를 호출해야 합니다.

[virtual noexcept] QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject()

QOpenGLVertexArrayObject 및 기본 OpenGL 리소스를 삭제합니다.

void QOpenGLVertexArrayObject::bind()

이 버텍스 배열 객체를 OpenGL 바인딩 포인트에 바인딩합니다. 이 시점부터 release()가 호출되거나 다른 버텍스 배열 객체가 바인딩될 때까지 버텍스 데이터 상태에 대한 모든 수정 사항은 이 버텍스 배열 객체 내부에 저장됩니다.

다른 버텍스 배열 객체가 바인딩되면 나중에 이 객체에서 다시 한 번 bind()를 호출하여 이 객체와 관련된 상태 집합을 복원할 수 있습니다. 이를 통해 렌더링 함수에서 버텍스 데이터 상태를 효율적으로 변경할 수 있습니다.

bool QOpenGLVertexArrayObject::create()

기본 OpenGL 버텍스 배열 객체를 생성합니다. 이 함수가 성공하려면 현재 버텍스 배열 객체를 지원하는 유효한 OpenGL 컨텍스트가 있어야 합니다.

OpenGL 버텍스 배열 객체가 성공적으로 생성되면 true 을 반환합니다.

반환값이 false 인 경우 버텍스 배열 객체 지원을 사용할 수 없습니다. 이는 오류가 아닙니다. OpenGL 2.x 또는 OpenGL ES 2.0을 사용하는 시스템에서는 버텍스 배열 객체가 지원되지 않을 수 있습니다. 이 경우 애플리케이션은 자유롭게 실행할 수 있지만 VAO를 사용하지 않는 방식으로도 작동할 수 있도록 준비해야 합니다. 즉, 단순히 bind()를 호출하는 대신 isCreated()의 값을 확인하고 버텍스 배열 객체가 없는 경우 기존 방식으로 버텍스 배열을 초기화해야 합니다.

isCreated()도 참조하세요 .

void QOpenGLVertexArrayObject::destroy()

기본 OpenGL 버텍스 배열 객체를 삭제합니다. 이 함수가 성공하려면 현재 버텍스 배열 객체를 지원하는 유효한 OpenGL 컨텍스트가 있어야 합니다.

bool QOpenGLVertexArrayObject::isCreated() const

true 을 반환하면 기본 OpenGL 버텍스 배열 객체가 생성되었습니다. true 을 반환하고 연결된 OpenGL 컨텍스트가 최신이면 이 객체를 bind()할 수 있습니다.

GLuint QOpenGLVertexArrayObject::objectId() const

기본 OpenGL 버텍스 배열 객체의 ID를 반환합니다.

void QOpenGLVertexArrayObject::release()

기본 버텍스 배열 객체(id = 0)를 바인딩하여 이 버텍스 배열 객체의 바인딩을 해제합니다.

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