QOpenGLBuffer Class
QOpenGLBuffer 클래스는 OpenGL 버퍼 객체를 생성하고 관리하기 위한 함수를 제공합니다. 더 보기...
Header: | #include <QOpenGLBuffer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
qmake: | QT += opengl |
- 상속된 멤버를 포함한 모든 멤버 목록
- QOpenGL버퍼는 3D 렌더링의 일부입니다.
공용 유형
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는 얕은 복사를 수행하지만 쓰기 시 복사 시맨틱을 구현하지는 않습니다. 복사본이 수정될 때마다 원본 객체가 영향을 받습니다.
멤버 유형 문서
enum QOpenGLBuffer::Access
이 열거형은 QOpenGLBuffer::map()의 액세스 모드를 정의합니다.
Constant | 값 | 설명 |
---|---|---|
QOpenGLBuffer::ReadOnly | 0x88B8 | 버퍼가 읽기 전용으로 매핑됩니다. |
QOpenGLBuffer::WriteOnly | 0x88B9 | 버퍼는 쓰기 전용으로 매핑됩니다. |
QOpenGLBuffer::ReadWrite | 0x88BA | 버퍼가 읽기 및 쓰기용으로 매핑됩니다. |
열거형 QOpenGL버퍼::범위접근 플래그
플래그 QOpenGL버퍼::범위접근 플래그
이 열거형은 QOpenGLBuffer::mapRange()에 대한 액세스 모드 비트를 정의합니다.
Constant | 값 | 설명 |
---|---|---|
QOpenGLBuffer::RangeRead | 0x0001 | 버퍼가 읽기용으로 매핑됩니다. |
QOpenGLBuffer::RangeWrite | 0x0002 | 버퍼는 쓰기용으로 매핑됩니다. |
QOpenGLBuffer::RangeInvalidate | 0x0004 | 지정된 범위의 이전 내용을 삭제합니다. |
QOpenGLBuffer::RangeInvalidateBuffer | 0x0008 | 전체 버퍼의 이전 내용을 삭제합니다. |
QOpenGLBuffer::RangeFlushExplicit | 0x0010 | 수정 사항을 glFlushMappedBufferRange 을 통해 명시적으로 플러시해야 함을 나타냅니다. |
QOpenGLBuffer::RangeUnsynchronized | 0x0020 | mapRange()에서 반환하기 전에 보류 중인 작업을 동기화해서는 안 됨을 나타냅니다. |
RangeAccessFlags 유형은 QFlags<RangeAccessFlag>에 대한 typedef입니다. RangeAccessFlag 값의 OR 조합을 저장합니다.
enum QOpenGLBuffer::Type
이 열거형은 QOpenGLBuffer 로 생성할 OpenGL 버퍼 객체의 유형을 정의합니다.
Constant | 값 | 설명 |
---|---|---|
QOpenGLBuffer::VertexBuffer | 0x8892 | 버텍스 배열을 지정할 때 사용하는 버텍스 버퍼 객체입니다. |
QOpenGLBuffer::IndexBuffer | 0x8893 | glDrawElements() 와 함께 사용하기 위한 인덱스 버퍼 객체. |
QOpenGLBuffer::PixelPackBuffer | 0x88EB | 픽셀 팩 버퍼 객체 - OpenGL 서버에서 픽셀 데이터를 읽기 위한 객체입니다(예: glReadPixels() ). OpenGL/ES에서는 지원되지 않습니다. |
QOpenGLBuffer::PixelUnpackBuffer | 0x88EC | 픽셀 언팩 버퍼 객체는 OpenGL 서버에 픽셀 데이터를 쓰기 위한 객체입니다(예: glTexImage2D() ). OpenGL/ES에서는 지원되지 않습니다. |
enum QOpenGLBuffer::UsagePattern
이 열거형은 QOpenGLBuffer 객체의 사용 패턴을 정의합니다.
Constant | 값 | 설명 |
---|---|---|
QOpenGLBuffer::StreamDraw | 0x88E0 | 데이터는 한 번 설정되어 그리기 작업에 몇 번 사용됩니다. OpenGL/ES 1.1에서는 StaticDraw와 동일합니다. |
QOpenGLBuffer::StreamRead | 0x88E1 | 데이터는 한 번 설정되고 OpenGL 서버에서 데이터를 다시 읽는 데 몇 번 사용됩니다. OpenGL/ES에서는 지원되지 않습니다. |
QOpenGLBuffer::StreamCopy | 0x88E2 | 데이터는 한 번 설정되고 이후 그리기 작업에 사용하기 위해 OpenGL 서버에서 데이터를 다시 읽는 데 몇 번 사용됩니다. OpenGL/ES에서는 지원되지 않습니다. |
QOpenGLBuffer::StaticDraw | 0x88E4 | 데이터는 한 번 설정되어 그리기 작업에 여러 번 사용됩니다. |
QOpenGLBuffer::StaticRead | 0x88E5 | 데이터는 한 번 설정된 후 OpenGL 서버에서 데이터를 다시 읽어오는 데 여러 번 사용됩니다. OpenGL/ES에서는 지원되지 않습니다. |
QOpenGLBuffer::StaticCopy | 0x88E6 | 데이터는 한 번 설정되고 이후 그리기 작업에 사용하기 위해 OpenGL 서버에서 데이터를 다시 읽어오는 데 여러 번 사용됩니다. OpenGL/ES에서는 지원되지 않습니다. |
QOpenGLBuffer::DynamicDraw | 0x88E8 | 데이터는 반복적으로 수정되어 그리기 작업에 여러 번 사용됩니다. |
QOpenGLBuffer::DynamicRead | 0x88E9 | 데이터가 반복적으로 수정되어 OpenGL 서버에서 데이터를 다시 읽어오는 데 여러 번 사용됩니다. OpenGL/ES에서는 지원되지 않습니다. |
QOpenGLBuffer::DynamicCopy | 0x88EA | 추가 그리기 작업에 사용하기 위해 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는 쓰기 시 복사 의미를 구현하지 않으므로 복사본이 수정될 때마다 other 이 영향을 받습니다.
[noexcept, since 6.5]
QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer &&other)
Move - 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()가 호출되었으며 현재 컨텍스트에 바인딩된 것으로 가정합니다.
bool QOpenGLBuffer::bind()
이 객체와 연관된 버퍼를 현재 OpenGL 컨텍스트에 바인딩합니다. type ()이 이 OpenGL 구현에서 지원되지 않아 바인딩할 수 없는 경우 false
을 반환합니다.
버퍼는 create()가 호출되었을 때와 동일한 QOpenGLContext 현재 또는 공유 중인 다른 QOpenGLContext 에 바인딩되어야 합니다. 그렇지 않으면 이 함수에서 false가 반환됩니다.
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를 반환합니다.
void *QOpenGLBuffer::map(QOpenGLBuffer::Access access)
이 버퍼의 내용을 애플리케이션의 메모리 공간에 매핑하고 이에 대한 포인터를 반환합니다. 메모리 매핑이 불가능하면 null을 반환합니다. access 매개변수는 수행할 액세스 유형을 나타냅니다.
이 버퍼에서 create()가 호출되었으며 현재 컨텍스트에 바인딩되어 있다고 가정합니다.
참고: 이 함수는 GL_OES_mapbuffer
확장자가 있는 경우 OpenGL ES 2.0 이하에서만 지원됩니다.
참고: 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에서 지원되지 않습니다.
이 버퍼는 현재 컨텍스트에 바인딩된 것으로 가정합니다.
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을 반환합니다.
이 버퍼는 현재 컨텍스트에 바인딩된 것으로 가정합니다.
[noexcept, since 6.5]
void QOpenGLBuffer::swap(QOpenGLBuffer &other)
이 버퍼를 other 로 바꿉니다. 이 작업은 매우 빠르며 실패하지 않습니다.
이 함수는 Qt 6.5에 도입되었습니다.
QOpenGLBuffer::Type QOpenGLBuffer::type() const
이 객체가 나타내는 버퍼의 유형을 반환합니다.
bool QOpenGLBuffer::unmap()
이전에 map()를 호출하여 애플리케이션의 메모리 공간에 매핑된 버퍼를 매핑 해제합니다. 매핑 해제에 성공하면 true
을 반환하고, 그렇지 않으면 거짓을 반환합니다.
이 버퍼는 현재 컨텍스트에 바인딩되어 있고 이전에 map()로 매핑된 것으로 가정합니다.
참고: 이 함수는 GL_OES_mapbuffer
확장자가 있는 경우 OpenGL ES 2.0 이하에서만 지원됩니다.
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 은 쓰기 시 복사 시맨틱을 구현하지 않으므로 복사본이 수정될 때마다 other 이 영향을 받습니다.
© 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.