OpenSubdiv.OPENSUBDIV_VERSION.Bfr
OpenSubdiv.OPENSUBDIV_VERSION.Far
OpenSubdiv.OPENSUBDIV_VERSION.Osd
OpenSubdiv.OPENSUBDIV_VERSION.Sdc
OpenSubdiv.OPENSUBDIV_VERSION.Vtr

OpenSubdiv.OPENSUBDIV_VERSION.Osd.CpuGLVertexBuffer

OpenSubdiv.OPENSUBDIV_VERSION.Osd.CpuGLVertexBuffer是OpenSubdiv库中的一个类,用于创建CPU和OpenGL共用的顶点缓冲区。

构造函数

    CpuGLVertexBuffer(const Far::VertexBufferDescriptor& desc)

CpuGLVertexBuffer类的构造函数接收一个Far::VertexBufferDescriptor结构体作为参数,用于确定顶点缓冲区的大小和布局。构造函数会根据结构体中的信息,创建一个CPU和OpenGL共用的缓冲区。

函数

    void UpdateData(const float* src, size_t numVertices)

UpdateData函数可以用于更新缓冲区中的数据。传入数据的指针和顶点数量即可进行数据更新。

    GLuint BindVBO() const

BindVBO函数用于在OpenGL中绑定顶点缓冲区。函数返回缓冲区的VBO句柄。

    GLuint GetVBO() const

GetVBO函数返回顶点缓冲区的VBO句柄。

示例代码

以下示例代码用于创建一个顶点缓冲区并绑定到OpenGL中。

// 设置顶点缓冲区描述符
Far::VertexBufferDescriptor desc(/*numVertices=*/4,
                                  /*numVertexElements=*/3);
desc.vertexStride = sizeof(float) * 3;
desc.usage = OpenSubdiv::Osd::kStaticDraw;

// 创建顶点缓冲区
OpenSubdiv::Osd::CpuGLVertexBuffer vertexBuffer(desc);

// 创建一个包含顶点坐标的数组
float vertices[12] = { 0.0f, 0.0f, 0.0f,
                       1.0f, 0.0f, 0.0f,
                       0.0f, 1.0f, 0.0f,
                       1.0f, 1.0f, 0.0f };
                       
// 更新数据
vertexBuffer.UpdateData(vertices, 4);

// 绑定顶点缓冲区到OpenGL中
GLuint vbo = vertexBuffer.BindVBO();
glBindBuffer(GL_ARRAY_BUFFER, vbo);