GL错误值1285:内存不足

时间:2013-01-29 22:37:47

标签: java opengl lwjgl

我正试图以几种不同的方式渲染一个简单的四边形。

当一切都存储在一个类中时,我可以很容易地做到这一点。但我希望能够在屏幕上呈现多个对象,因此我开始将代码分开并将各种功能放在不同的类中。问题是,当我将渲染功能放在Entity类中时,我开始收到错误。

这是函数,它是一个VertexArrayObject类:

public void render(){
    glBindVertexArray(vaoID);
    glEnableVertexAttribArray(0);
    glEnableVertexAttribArray(1);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboiID);

    this.exitOnGLError("Before render");
    glDrawElements(GL_TRIANGLES, indicesCount, GL_UNSIGNED_BYTE, 0);
    this.exitOnGLError("After render");

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    glDisableVertexAttribArray(0);
    glDisableVertexAttribArray(1);
    glBindVertexArray(0);

    this.exitOnGLError("error rendering vao");
}

同样,我所做的就是将它从主类转移到管理VAO的类中,理论上将其渲染。

它给出了错误值1285,并且获得错误的错误调用是标记为“After render”的错误调用。 (exitOnGLError()是一种错误检查方法)。

错误1285显然意味着“内存不足”这显然是荒谬的,因为我使用1兆字节的图像文件并且......我无法想象我的四个顶点浮动缓冲区正​​在填满我的所有VRAM。

还有什么可能导致此错误?

3 个答案:

答案 0 :(得分:2)

为那些来自Google的人提供可能的答案。

glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, indexBuffer );
glBufferData( GL_ARRAY_BUFFER, sizeof( indices ), &indices[0], GL_STATIC_DRAW );

请注意以粗体显示的copypaste错误。这导致错误1285并且相当长时间没有头疼。

答案 1 :(得分:2)

仅供参考我有同样的错误,这是因为我没有将调用添加到glBufferData这一事实,这是你实际发送数据"对于opengl。

glBufferData(GL_ARRAY_BUFFER,sizeof(GLSL_XYZNDUV_Item)* p-> iNum_verts,p-> pVerts,GL_STATIC_DRAW);

glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(GLushort)* p-> iNum_tris * 2,p-> pIndices,GL_STATIC_DRAW);

答案 2 :(得分:0)

您应首先验证是否按正确顺序制作了所有OpenGL类,例如你应该只在创建VAO时绑定VBO,而不是在渲染时绑定它。

以下是我在VAO课程中订购电话的方式:

    // creation
    array = glGenVertexArrays();
    glBindVertexArray(array);

    vertices = glGenBuffers();
    glBindBuffer(GL_ARRAY_BUFFER, vertices);
    glBufferData(GL_ARRAY_BUFFER, b, usage);

    for (attributes) {
        glEnableVertexAttribArray(index);
        glVertexAttribPointer(index, dimension, type, false, bytesPerVertex, offset);
    }

    if (indices are used) {
      indices = glGenBuffers();
      glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indices);
      glBufferData(GL_ELEMENT_ARRAY_BUFFER, buffer, usage);
    }

    // render
    glBindVertexArray(array);
    program.use(); // binds shader program and textures
    if (indices == -1)
        glDrawArrays(mode, 0, size);
    else
        glDrawElements(mode, size, indicesType, 0);