이 페이지에서

QOpenGLBuffer Class

QOpenGLBuffer 클래스는 OpenGL 버퍼 객체를 생성하고 관리하는 데 필요한 함수를 제공합니다. 더 보기...

헤더: #include <QOpenGLBuffer>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake: QT += opengl

공개 유형

enum Access { ReadOnly, WriteOnly, ReadWrite }
enum RangeAccessFlag { RangeRead, RangeWrite, RangeInvalidate, RangeInvalidateBuffer, RangeFlushExplicit, RangeUnsynchronized }
flags RangeAccessFlags
enum Type { VertexBuffer, IndexBuffer, PixelPackBuffer, PixelUnpackBuffer }
enum UsagePattern { StreamDraw, StreamRead, StreamCopy, StaticDraw, StaticRead, …, DynamicCopy }

공개 함수

QOpenGLBuffer()
QOpenGLBuffer(QOpenGLBuffer::Type type)
QOpenGLBuffer(const QOpenGLBuffer &other)
(since 6.5) QOpenGLBuffer(QOpenGLBuffer &&other)
~QOpenGLBuffer()
void allocate(const void *data, int count)
void allocate(int count)
bool bind()
GLuint bufferId() const
bool create()
void destroy()
bool isCreated() const
void *map(QOpenGLBuffer::Access access)
void *mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access)
bool read(int offset, void *data, int count)
void release()
void setUsagePattern(QOpenGLBuffer::UsagePattern value)
int size() const
(since 6.5) void swap(QOpenGLBuffer &other)
QOpenGLBuffer::Type type() const
bool unmap()
QOpenGLBuffer::UsagePattern usagePattern() const
void write(int offset, const void *data, int count)
(since 6.5) QOpenGLBuffer &operator=(QOpenGLBuffer &&other)
QOpenGLBuffer &operator=(const QOpenGLBuffer &other)

정적 공용 멤버

void release(QOpenGLBuffer::Type type)

상세 설명

버퍼 객체는 OpenGL 서버에서 생성되므로, 클라이언트 애플리케이션은 필요할 때마다 정점, 인덱스, 텍스처 이미지 데이터 등을 업로드할 필요가 없습니다.

QOpenGLBuffer 객체는 기본이 되는 OpenGL 버퍼 객체에 대한 참조로 복사될 수 있습니다:

QOpenGLBuffer buffer1(QOpenGLBuffer::IndexBuffer);
buffer1.create();

QOpenGLBuffer buffer2 = buffer1;

QOpenGLBuffer는 이러한 방식으로 객체를 복사할 때 얕은 복사(shallow copy)를 수행하지만, 쓰기 시 복사(copy-on-write) 세미오틱은 구현하지 않습니다. 복사본이 수정될 때마다 원본 객체에도 변경 사항이 반영됩니다.

경고: QOpenGLBuffer가 사용하는모든 데이터는 신뢰할 수 있는 콘텐츠여야 합니다. 버퍼 데이터는 기본 OpenGL 구현체로 전달됩니다. 애플리케이션 개발자는 allocate() 및 write()와 같은 함수에 사용자가 제공한 콘텐츠를 전달하기 전에 잠재적인 영향을 신중하게 고려해야 합니다.

멤버 유형 문서

enum QOpenGLBuffer::Access

이 열거형은 ` QOpenGLBuffer::map()`의 액세스 모드를 정의합니다.

상수값상수값
QOpenGLBuffer::ReadOnly0x88B8버퍼는 읽기 전용으로 매핑됩니다.
QOpenGLBuffer::WriteOnly0x88B9버퍼는 쓰기 전용으로 매핑됩니다.
QOpenGLBuffer::ReadWrite0x88BA버퍼가 읽기 및 쓰기용으로 매핑됩니다.

enum QOpenGLBuffer::RangeAccessFlag
flags QOpenGLBuffer::RangeAccessFlags

이 열거형은 ` QOpenGLBuffer::mapRange()`의 액세스 모드 비트를 정의합니다.

상수값설명
QOpenGLBuffer::RangeRead0x0001버퍼는 읽기용으로 매핑됩니다.
QOpenGLBuffer::RangeWrite0x0002버퍼가 쓰기용으로 매핑됩니다.
QOpenGLBuffer::RangeInvalidate0x0004지정된 범위의 이전 내용을 삭제합니다.
QOpenGLBuffer::RangeInvalidateBuffer0x0008지정된 범위의 이전 내용을 모두 삭제합니다.
QOpenGLBuffer::RangeFlushExplicit0x0010glFlushMappedBufferRange 를 통해 수정 내용을 명시적으로 플러시해야 함을 나타냅니다.
QOpenGLBuffer::RangeUnsynchronized0x0020mapRange()에서 반환되기 전에 보류 중인 작업이 동기화되어서는 안됨을 나타냅니다.

RangeAccessFlags 유형은 QFlags<RangeAccessFlag>에 대한 typedef입니다. 이 유형은 RangeAccessFlag 값들의 OR 조합을 저장합니다.

enum QOpenGLBuffer::Type

이 열거형은 ` QOpenGLBuffer`를 사용하여 생성할 OpenGL 버퍼 객체의 유형을 정의합니다.

상수값설명
QOpenGLBuffer::VertexBuffer0x8892버텍스 배열을 지정할 때 사용하는 버텍스 버퍼 객체입니다.
QOpenGLBuffer::IndexBuffer0x8893glDrawElements() 와 함께 사용하는 인덱스 버퍼 객체입니다.
QOpenGLBuffer::PixelPackBuffer0x88EBOpenGL 서버에서 픽셀 데이터를 읽기 위한 픽셀 팩 버퍼 객체(예: ` glReadPixels()` 사용 시). OpenGL/ES에서는 지원되지 않습니다.
QOpenGLBuffer::PixelUnpackBuffer0x88ECOpenGL 서버에 픽셀 데이터를 쓰기 위해 사용되는 픽셀 언팩 버퍼 객체(예: ` glTexImage2D()` 사용 시). OpenGL/ES에서는 지원되지 않습니다.

enum QOpenGLBuffer::UsagePattern

이 열거형은 ` QOpenGLBuffer ` 객체의 사용 패턴을 정의합니다.

상수상수값설명
QOpenGLBuffer::StreamDraw0x88E0데이터는 한 번 설정된 후 렌더링 작업에 몇 번 사용됩니다. OpenGL/ES 1.1에서는 이 동작이 StaticDraw와 동일합니다.
QOpenGLBuffer::StreamRead0x88E1데이터는 한 번 설정된 후 OpenGL 서버에서 데이터를 다시 읽어오는 데 몇 번 사용됩니다. OpenGL/ES에서는 지원되지 않습니다.
QOpenGLBuffer::StreamCopy0x88E2데이터는 한 번 설정되며, 추가 렌더링 작업에 사용하기 위해 OpenGL 서버에서 데이터를 다시 읽어오는 데 몇 번 사용됩니다. OpenGL/ES에서는 지원되지 않습니다.
QOpenGLBuffer::StaticDraw0x88E4데이터는 한 번 설정된 후 그리기 작업에 여러 번 사용됩니다.
QOpenGLBuffer::StaticRead0x88E5데이터는 한 번 설정된 후 OpenGL 서버에서 데이터를 다시 읽어오는 데 여러 번 사용됩니다. OpenGL/ES에서는 지원되지 않습니다.
QOpenGLBuffer::StaticCopy0x88E6데이터는 한 번 설정된 후, 추가 렌더링 작업에 사용하기 위해 OpenGL 서버에서 데이터를 다시 읽어오는 데 여러 번 사용됩니다. OpenGL/ES에서는 지원되지 않습니다.
QOpenGLBuffer::DynamicDraw0x88E8데이터는 반복적으로 수정되며, 그리기 작업에 여러 번 사용됩니다.
QOpenGLBuffer::DynamicRead0x88E9데이터는 반복적으로 수정되며, OpenGL 서버에서 데이터를 다시 읽어오는 데 여러 번 사용됩니다. OpenGL/ES에서는 지원되지 않습니다.
QOpenGLBuffer::DynamicCopy0x88EA데이터는 반복적으로 수정되며, 추가 렌더링 작업에 사용하기 위해 OpenGL 서버에서 데이터를 다시 읽어오는 데 여러 번 사용됩니다. OpenGL/ES에서는 지원되지 않습니다.

멤버 함수 문서

QOpenGLBuffer::QOpenGLBuffer()

QOpenGLBuffer::VertexBuffer 유형의 새로운 버퍼 객체를 생성합니다.

참고: 이 생성자는 QOpenGLBuffer 인스턴스만 생성합니다. OpenGL 서버 내의 실제 버퍼 객체는 create()이 호출될 때까지 생성되지 않습니다.

create()도 참조하십시오 .

[explicit] QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer::Type type)

type 의 새로운 버퍼 객체를 생성합니다.

참고: 이 생성자는 QOpenGLBuffer 인스턴스만 생성합니다. OpenGL 서버 내의 실제 버퍼 객체는 create()가 호출될 때까지 생성되지 않습니다.

create()도 참조하십시오 .

QOpenGLBuffer::QOpenGLBuffer(const QOpenGLBuffer &other)

other 의 얕은 복사본을 생성합니다.

참고: QOpenGLBuffer는 쓰기 시 복사(copy-on-write) 세미언틱을 구현하지 않으므로, 복사본이 수정될 때마다 other 에도 변경 사항이 반영됩니다.

[noexcept, since 6.5] QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer &&other)

other 에서 새로운 QOpenGLBuffer를 이동 생성합니다.

참고: 이동된객체 ` other `는 부분적으로 형성된 상태가 되며, 이 상태에서는 소멸 및 새 값 할당만이 유효한 연산입니다.

이 함수는 Qt 6.5에서 도입되었습니다.

[noexcept] QOpenGLBuffer::~QOpenGLBuffer()

이 버퍼 객체를 삭제하며, 여기에는 OpenGL 서버에서 사용 중인 저장 공간도 포함됩니다.

void QOpenGLBuffer::allocate(const void *data, int count)

버퍼에 count 바이트의 공간을 할당하며, 이 공간은 data 의 내용으로 초기화됩니다. 기존에 있던 내용은 모두 제거됩니다.

이 버퍼에 대해 create() 함수가 호출되었으며, 해당 버퍼가 현재 컨텍스트에 바인딩되어 있다고 가정합니다.

create(), read(), write()도 참조하십시오 .

void QOpenGLBuffer::allocate(int count)

버퍼에 count 바이트의 공간을 할당합니다. 기존 내용은 모두 삭제됩니다.

이 버퍼에 대해 create()가 호출되었으며, 현재 컨텍스트에 바인딩되어 있다고 가정합니다.

이 함수는 오버로드된 함수입니다.

create() 및 write()도 참조하십시오 .

bool QOpenGLBuffer::bind()

이 객체와 연관된 버퍼를 현재 OpenGL 컨텍스트에 바인딩합니다. 바인딩이 불가능한 경우(대개 해당 OpenGL 구현에서 type()가 지원되지 않기 때문)에는 false 를 반환합니다.

버퍼는 create()이 호출되었을 당시의 QOpenGLContext 와 동일하거나, 해당 와 공유 중인 다른 QOpenGLContext 에 바인딩되어야 합니다. 그렇지 않은 경우, 이 함수는 false를 반환합니다.

release() 및 create()도 참조하십시오 .

GLuint QOpenGLBuffer::bufferId() const

이 버퍼와 연관된 OpenGL 식별자를 반환합니다. 버퍼가 생성되지 않은 경우 0을 반환합니다.

isCreated()도 참조하십시오 .

bool QOpenGLBuffer::create()

OpenGL 서버에 버퍼 객체를 생성합니다. 객체가 생성된 경우 ` true `를 반환하고, 그렇지 않은 경우 `false`를 반환합니다.

이 함수는 현재 활성화된 QOpenGLContext 와 함께 호출되어야 합니다. 버퍼는 해당 컨텍스트(또는 해당 컨텍스트와 공유되는 다른 컨텍스트)에 바인딩되며, 오직 해당 컨텍스트에서만 사용할 수 있습니다.

OpenGL 구현체가 버퍼를 지원하지 않거나 현재 QOpenGLContext 가 없는 경우, 이 함수는 false를 반환합니다.

isCreated(), allocate(), write(), destroy()도 참조하십시오 .

void QOpenGLBuffer::destroy()

이 버퍼 객체를 삭제하며, 여기에는 OpenGL 서버에서 사용 중인 저장 공간도 포함됩니다. 이 버퍼에 대한 모든 참조는 무효화됩니다.

bool QOpenGLBuffer::isCreated() const

이 버퍼가 생성된 경우 true 를 반환하고, 그렇지 않은 경우 false를 반환합니다.

create() 및 destroy()도 참조하십시오 .

void *QOpenGLBuffer::map(QOpenGLBuffer::Access access)

이 버퍼의 내용을 애플리케이션의 메모리 공간에 매핑하고, 해당 메모리 공간에 대한 포인터를 반환합니다. 메모리 매핑이 불가능한 경우 null을 반환합니다. ` access ` 매개변수는 수행할 액세스 유형을 나타냅니다.

이 버퍼에 대해 create()이 호출되었으며, 해당 버퍼가 현재 컨텍스트에 바인딩되어 있다고 가정합니다.

참고: 이 함수는 OpenGL ES 2.0 이하 버전에서 GL_OES_mapbuffer 확장이 지원되는 경우에만 사용 가능합니다.

참고: OpenGL ES 3.0이상에서 , 또는 데스크톱 OpenGL의 경우 GL_ARB_map_buffer_range 이 지원되는 경우, 이 함수는 glMapBuffer 대신 glMapBufferRange 을 사용합니다.

unmap(), create(), bind(), mapRange()도 참조하십시오 .

void *QOpenGLBuffer::mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access)

이 버퍼의 내용 중 offset 및 count 로 지정된 범위를 애플리케이션의 메모리 공간에 매핑하고, 해당 메모리 공간에 대한 포인터를 반환합니다. 메모리 매핑이 불가능한 경우 null을 반환합니다. access 매개변수는 액세스 플래그의 조합을 지정합니다.

이 버퍼에 대해 create()가 호출되었으며, 해당 버퍼가 현재 컨텍스트에 바인딩되어 있다고 가정합니다.

참고: 이 함수는 OpenGL ES 2.0 및 그 이전 버전에서는 사용할 수 없습니다.

참조: unmap(), create(), bind().

bool QOpenGLBuffer::read(int offset, void *data, int count)

offset 부터 시작하는 이 버퍼의 count 바이트를 data 로 읽습니다. 성공 시 true 를 반환하고, 버퍼에서 읽는 기능이 지원되지 않으면 false를 반환합니다. OpenGL/ES 환경에서는 버퍼 읽기 기능이 지원되지 않습니다.

이 버퍼는 현재 컨텍스트에 바인딩되어 있다고 가정합니다.

write() 및 bind()도 참조하십시오 .

void QOpenGLBuffer::release()

현재 OpenGL 컨텍스트에서 이 객체와 연결된 버퍼를 해제합니다.

이 함수는 버퍼에 대해 ` bind()`가 호출되었을 때와 동일한 ` QOpenGLContext `가 현재로 설정된 상태에서 호출되어야 합니다.

bind()도 참조하십시오 .

[static] void QOpenGLBuffer::release(QOpenGLBuffer::Type type)

현재 QOpenGLContext 에서 type 와 연관된 버퍼를 해제합니다.

이 함수는 호출자가 어떤 ` QOpenGLBuffer `가 컨텍스트에 바인딩되었는지 알지 못하지만, 해당 버퍼가 반드시 해제되도록 보장하고자 할 때 사용하기 위해 ` glBindBuffer(type, 0) `를 직접 호출하는 것입니다.

QOpenGLBuffer::release(QOpenGLBuffer::VertexBuffer);

void QOpenGLBuffer::setUsagePattern(QOpenGLBuffer::UsagePattern value)

이 버퍼 객체의 사용 패턴을 ` value`로 설정합니다. 이 함수는 ` allocate()` 또는 ` write()`를 호출하기 전에 반드시 호출해야 합니다.

usagePattern(), allocate(), write()도 참조하십시오 .

int QOpenGLBuffer::size() const

읽기 작업의 경우, 이 버퍼에 담긴 데이터의 크기를 반환합니다. 버퍼 크기 조회가 지원되지 않거나 버퍼가 생성되지 않은 경우 -1을 반환합니다.

이 버퍼는 현재 컨텍스트에 바인딩되어 있는 것으로 가정합니다.

isCreated() 및 bind()도 참조하십시오 .

[noexcept, since 6.5] void QOpenGLBuffer::swap(QOpenGLBuffer &other)

이 버퍼를 ` other`와 교환합니다. 이 작업은 매우 빠르며 절대 실패하지 않습니다.

이 함수는 Qt 6.5에서 도입되었습니다.

QOpenGLBuffer::Type QOpenGLBuffer::type() const

이 객체가 나타내는 버퍼의 유형을 반환합니다.

bool QOpenGLBuffer::unmap()

이전 호출을 통해 map() 함수로 애플리케이션의 메모리 공간에 매핑된 버퍼의 매핑을 해제합니다. 매핑 해제가 성공하면 true 를 반환하고, 그렇지 않으면 false를 반환합니다.

이 버퍼는 현재 컨텍스트에 바인딩되어 있으며, 이전에 map()를 통해 매핑되었음을 전제로 합니다.

참고: 이 함수는 OpenGL ES 2.0 및 그 이전 버전에서 GL_OES_mapbuffer 확장 기능이 지원되는 경우에만 사용할 수 있습니다.

map()도 참조하십시오 .

QOpenGLBuffer::UsagePattern QOpenGLBuffer::usagePattern() const

이 버퍼 객체의 사용 패턴을 반환합니다. 기본값은 StaticDraw 입니다.

setUsagePattern()도 참조하십시오 .

void QOpenGLBuffer::write(int offset, const void *data, int count)

offset 부터 시작하는 이 버퍼의 count 바이트를 data 의 내용으로 대체합니다. 버퍼에 있는 그 외의 바이트는 변경되지 않습니다.

이 버퍼에 대해 ` create()`가 호출되었으며, 해당 버퍼가 현재 컨텍스트에 바인딩되어 있다고 가정합니다.

create(), read(), allocate()도 참조하십시오 .

[noexcept, since 6.5] QOpenGLBuffer &QOpenGLBuffer::operator=(QOpenGLBuffer &&other)

other 를 이 QOpenGLBuffer 인스턴스에 이동 할당합니다.

참고: 이동된객체 other 는 부분적으로 형성된 상태가 되며, 이 상태에서는 소멸과 새 값 할당만이 유효한 연산입니다.

이 함수는 Qt 6.5에서 도입되었습니다.

QOpenGLBuffer &QOpenGLBuffer::operator=(const QOpenGLBuffer &other)

other 의 얕은 복사본을 이 객체에 할당합니다.

참고: ` QOpenGLBuffer `은 쓰기 시 복사(copy-on-write) 세манти크를 구현하지 않으므로, 복사본이 수정될 때마다 ` other `에도 변경 사항이 반영됩니다.

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