osg.BufferData 类代表了一个缓冲区对象,可以用于存储任意类型的数据。
osg::BufferData::BufferData(GLenum dataType, GLenum usageHint = GL_DYNAMIC_DRAW);
参数:
dataType:缓冲区数据类型,例如 GL_FLOAT、GL_UNSIGNED_BYTE 等。usageHint:缓冲区用途提示,例如 GL_STATIC_DRAW、GL_DYNAMIC_DRAW 等。void setNumElements(unsigned int num);
设置缓冲区元素数量。每个元素的大小由 dataType 决定。
void setData(const void* data, unsigned int size, unsigned int offset = 0);
将缓冲区数据设置为给定数据。data 参数是指向数据的指针,size 是数据大小,offset 是偏移量。
void* map(GLenum access);
映射缓冲区到 CPU 内存中,并返回一个指向映射区域的指针。access 参数表示 CPU 可以对映射区域进行的访问权限,例如 GL_READ_ONLY、GL_WRITE_ONLY 等。
void unmap();
解除缓冲区和 CPU 内存的映射关系。
GLenum getDataType() const;
返回缓冲区数据类型。
GLenum getUsageHint() const;
返回缓冲区用途提示。
unsigned int getNumElements() const;
返回缓冲区元素数量。
unsigned int getElementSize() const;
返回每个元素的大小。
unsigned int getTotalSize() const;
返回缓冲区总大小。
bool isMapped() const;
返回缓冲区是否被映射到 CPU 内存中。
osg::BufferData* bufferData = new osg::BufferData(GL_FLOAT, GL_STATIC_DRAW);
bufferData->setNumElements(3);
float data[3] = {1.0f, 2.0f, 3.0f};
bufferData->setData(data, 3 * sizeof(float));
float* mappedData = static_cast<float*>(bufferData->map(GL_WRITE_ONLY));
mappedData[2] = 4.0f;
bufferData->unmap();