是否可以将 VBO 保存在C++类中
Is it possible to save a VBO in a C++ class?
嘿伙计们,我在搞砸openGL,我目前正在绘制一个简单的立方体,我想知道我是否将 VBO/IBO/CBO 存储在我的立方体类中?
喜欢:
class Cube {
private:
GLuint vBO;
GLuint cBO;
GLuint iBO;
然后我会打电话:
void Cube::setupDataBuffer() {
glGenBuffers(1, &vBO);
glBindBuffer(GL_ARRAY_BUFFER, vBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexBufferData), vertexBufferData, GL_STATIC_DRAW);
glGenBuffers(1, &iBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indexBufferData), indexBufferData, GL_STATIC_DRAW);
glGenBuffers(1, &cBO);
glBindBuffer(GL_ARRAY_BUFFER, cBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(colorBufferData), colorBufferData, GL_STATIC_DRAW);
}
但是,如果我想在我的主节点中绘制立方体.cpp则不会出现任何内容,但是如果我将 VBO/CBO/IBO 放在我的主节点中并在那里执行其他代码,则立方体也会出现。
所以我的问题是:如何在我的类中生成和绑定缓冲区对象?顺便说一下,我正在使用opengl 3.3
你可以做这样的事情:
void Cube::draw() {
glBindBuffer(GL_ARRAY_BUFFER, vBO);
glEnableVertexAttribArray(...);
glVertexAttribPointer(...);
glBindBuffer(GL_ARRAY_BUFFER, cBO);
glEnableVertexAttribArray(...);
glVertexAttribPointer(...);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iBO);
glDrawElements(...);
}
这将逐个对象完成您需要的所有上下文设置。
相关文章:
- C++模板来检查友元函数的存在
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- C++quit()函数中可能存在作用域问题
- C++擦除(如果存在)
- g++ 说函数不存在,即使包含正确的标头
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- C++Builder中的OnClick事件签名存在问题
- 如何正确地将分支添加到已存在的树中
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 如何将分支添加到已存在的TTree:ROOT
- 地图计数确实很重要,或者只是检查是否存在
- 通用C++/Python 多语言的存在
- 为什么我的共享库中存在展开符号