Java OpenGL:存储在其他类中时无法渲染VAO

Java OpenGL:存储在其他类中时无法渲染VAO,java,c++,opengl,visual-c++,Java,C++,Opengl,Visual C++,问题就在这里。我开始从OpenGLjava引擎转移到OpenGL+C++引擎。问题是当试图在类中存储VAO时。在某些情况下,它似乎不会呈现测试三角形。如果我使用renderMesh(Mesh&Mesh)而不是renderMesh(Mesh&Mesh),在大多数情况下它都可以工作 装载机类别代码: void Loader::bindBuffer(GLuint vboID, GLfloat* data) { glBindBuffer(GL_ARRAY_BUFFER, vboID);

问题就在这里。我开始从OpenGLjava引擎转移到OpenGL+C++引擎。问题是当试图在类中存储VAO时。在某些情况下,它似乎不会呈现测试三角形。如果我使用
renderMesh(Mesh&Mesh)
而不是
renderMesh(Mesh&Mesh)
,在大多数情况下它都可以工作

装载机类别代码:

void Loader::bindBuffer(GLuint vboID, GLfloat* data)
{
    glBindBuffer(GL_ARRAY_BUFFER, vboID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
}

Mesh Loader::getMeshData(GLfloat * verts, unsigned int numVerts)
{
    GLuint vaoID = createVAO();
    GLuint vboID = createVBO();
    glBindVertexArray(vaoID);
    bindBuffer(vboID, verts);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    unBindVAO();
    return Mesh(vaoID, numVerts);
}
void MasterRenderer::renderMesh(Mesh mesh)
{
glBindVertexArray(mesh.getVAOID());
glDrawArrays(GL_TRIANGLES, 0, mesh.getVerticiesAmount());
glBindVertexArray(0);
}
Mesh::Mesh(GLuint vaoID, unsigned int vertex_amount)
{
    this->vaoID = vaoID;
    this->vertex_amount = vertex_amount;
}

GLuint Mesh::getVAOID()
{
    return this->vaoID;
}

int Mesh::getVerticiesAmount()
{
    return this->vertex_amount;
}

Mesh::~Mesh()
{
    glDeleteVertexArrays(1, &vaoID);
}
渲染器类代码:

void Loader::bindBuffer(GLuint vboID, GLfloat* data)
{
    glBindBuffer(GL_ARRAY_BUFFER, vboID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
}

Mesh Loader::getMeshData(GLfloat * verts, unsigned int numVerts)
{
    GLuint vaoID = createVAO();
    GLuint vboID = createVBO();
    glBindVertexArray(vaoID);
    bindBuffer(vboID, verts);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    unBindVAO();
    return Mesh(vaoID, numVerts);
}
void MasterRenderer::renderMesh(Mesh mesh)
{
glBindVertexArray(mesh.getVAOID());
glDrawArrays(GL_TRIANGLES, 0, mesh.getVerticiesAmount());
glBindVertexArray(0);
}
Mesh::Mesh(GLuint vaoID, unsigned int vertex_amount)
{
    this->vaoID = vaoID;
    this->vertex_amount = vertex_amount;
}

GLuint Mesh::getVAOID()
{
    return this->vaoID;
}

int Mesh::getVerticiesAmount()
{
    return this->vertex_amount;
}

Mesh::~Mesh()
{
    glDeleteVertexArrays(1, &vaoID);
}
网格类别代码:

void Loader::bindBuffer(GLuint vboID, GLfloat* data)
{
    glBindBuffer(GL_ARRAY_BUFFER, vboID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
}

Mesh Loader::getMeshData(GLfloat * verts, unsigned int numVerts)
{
    GLuint vaoID = createVAO();
    GLuint vboID = createVBO();
    glBindVertexArray(vaoID);
    bindBuffer(vboID, verts);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    unBindVAO();
    return Mesh(vaoID, numVerts);
}
void MasterRenderer::renderMesh(Mesh mesh)
{
glBindVertexArray(mesh.getVAOID());
glDrawArrays(GL_TRIANGLES, 0, mesh.getVerticiesAmount());
glBindVertexArray(0);
}
Mesh::Mesh(GLuint vaoID, unsigned int vertex_amount)
{
    this->vaoID = vaoID;
    this->vertex_amount = vertex_amount;
}

GLuint Mesh::getVAOID()
{
    return this->vaoID;
}

int Mesh::getVerticiesAmount()
{
    return this->vertex_amount;
}

Mesh::~Mesh()
{
    glDeleteVertexArrays(1, &vaoID);
}
loader类在使用时似乎不加载任何内容。我应该在mesh类中使用VAO指针吗?我应该从getMeshData返回新网格吗?我能做什么? 任何相关的帮助都将不胜感激

编辑:

刚刚找到了我问题的答案。将glfloat数组传递到
getMeshData
时,它将成为指针。然后我得到指针的大小,而不是传入的数组

修复:
glBindBuffer(GL\u数组\u缓冲区,sizeof(数据)*\u num\u元素,数据,GL\u静态\u绘图)