GL错误:尝试使用VBO渲染时内存不足

南吉·德夫(NangiDev)

我一直在尝试使用“顶点缓冲对象”将顶点数据保存在GPU上并减少开销,但我无法使其正常工作。代码如下。

据我了解,您使用生成了缓冲区glGenBuffers,然后将其绑定到缓冲区,glBindBuffer以便可以使用它,然后使用将数据写入缓冲区glBufferData并完成操作,可以将其解除绑定并准备使用,只需再次绑定即可。

但是最后一部分是我遇到的麻烦,当我在创建并加载数据并将其加载并尝试使用它进行绘制后将其绑定时,它给了我很多 GL Error: Out of Memory.

我怀疑我的简单网格内存不足,因此我必须做错了什么。

谢谢。

编辑1:我每帧之后调用glGetError,但是由于这是我在整个程序中所做的唯一的OpenGL,这应该不是问题

//when loading the mesh we create the VBO
void createBuffer()
{
    GLuint buf;
    glGenBuffers(1, &buf);
    glBindBuffer(GL_ARRAY_BUFFER, buf);
    glBufferData(GL_ARRAY_BUFFER, vertNormalBuffer->size() * sizeof(GLfloat), (GLvoid*) bufferData, GL_STATIC_DRAW);

    //EDIT 1: forgot to show how I handle the buffer
    model->vertexNormalBuffer = &buf;
    //Unbinds it
    glBindBuffer(GL_ARRAY_BUFFER, 0);
}


void Fighter::doRedraw(GLuint shaderProgram)
{
    glm::mat4 transformationMatrix = getTransform();
    GLuint loc = glGetUniformLocation(shaderProgram,"modelviewMatrix");
    glUniformMatrix4fv(loc, 1, GL_FALSE, (GLfloat*) &transformationMatrix);

    glBindBuffer(GL_ARRAY_BUFFER, *model->vertexNormalBuffer);

    //If I uncomment this line below all works wonderfully, but isnt the purpose of VBO of not uploading the same data again and again?
    //glBufferData(GL_ARRAY_BUFFER, model->vertAndNormalArraySize * sizeof(GLfloat), model->vertAndNormalArray, GL_STATIC_DRAW);

    glEnableVertexAttribArray(0);
    glEnableVertexAttribArray(2);

    renderChild(model, model);

    glBindBuffer(GL_ARRAY_BUFFER, 0);
}

void Fighter::renderChild(ModelObject* model, ModelObject* parent)
{
    //Recursively render the mesh children
    for(int i = 0; i < model->nChildren; i++)
    {
        renderChild( dynamic_cast<ModelObject*>(model->children[i]), parent);
    }
    //Vertex and normal data are interlieved
    glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 8*sizeof(GLfloat),(void*)(model-            >vertexDataPosition*sizeof(GLfloat)));
    glVertexAttribPointer(2, 4, GL_FLOAT, GL_FALSE, 8*sizeof(GLfloat), (void*)((model->vertexDataPosition + 4)*sizeof(GLfloat)));

    //Draws using two sets of indices
    glDrawElements(GL_QUADS,  model->nQuads * 4, GL_UNSIGNED_INT,(void*) model->quadsIndices);
    glDrawElements(GL_TRIANGLES, model->nTriangles * 3, GL_UNSIGNED_INT, (void*) model->trisIndices);

}
Dolda2000

这是你的问题:

model->vertexNormalBuffer = &buf;
/* ... */
glBindBuffer(GL_ARRAY_BUFFER, *model->vertexNormalBuffer);

您存储的是buf变量的地址,而不是其内容,然后在createBuffer返回时它超出范围,并且很可能被其他数据覆盖,因此当您稍后渲染时,您将使用未初始化的缓冲区。只需将存储内容buf在你的vertexNormalBuffer领域代替。

我承认我不知道为什么OpenGL仅仅因为这个原因就认为它是“内存不足”是恰当的,但是也许您只是在调用未定义的行为。但是,它的确说明了为什么在重新绑定后用数据重新填充缓冲区时,为什么它开始工作,因为您然后隐式初始化了刚绑定的缓冲区。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

GL错误:尝试使用VBO渲染时内存不足

来自分类Dev

尝试使用 df.idxmax 时内存不足

来自分类Dev

在Matlab中使用'。*'操作时出现内存不足错误

来自分类Dev

使用AnimationDrawable时出现内存不足错误

来自分类Dev

在recyclerview中使用位图时出现内存不足错误

来自分类Dev

内存不足错误-尝试使用Win API检查ErrorHandler中的内存使用情况

来自分类Dev

内存不足错误-尝试使用Win API检查ErrorHandler中的内存使用情况

来自分类Dev

使用Android位图的内存不足错误

来自分类Dev

使用ImageView的内存不足错误

来自分类Dev

使用Fortify的PermGen内存不足错误

来自分类Dev

使用perl()时MATLAB内存不足

来自分类Dev

使用cupy时内存不足

来自分类Dev

使用Android位图时内存不足

来自分类Dev

尝试启动Windows Phone模拟器时出现“内存不足...”错误

来自分类Dev

尝试从父文档包含jQuery时,IE(any)和Firefox中出现内存不足错误

来自分类Dev

尝试启动Windows Phone模拟器时出现“内存不足...”错误

来自分类Dev

尝试在Raspberry Pi 3B上运行Lancache时出现“内存不足” Nginx错误

来自分类Dev

vi错误| 内存不足以进行撤消的行-尝试使用ed

来自分类Dev

Volley内存不足错误,奇怪的分配尝试

来自分类Dev

尝试持久化数据帧时内存不足

来自分类Dev

使用viewpager + imageview时出现内存不足错误,即使使用缓存和asynctask

来自分类Dev

getDrawable()的内存不足错误

来自分类Dev

Fontconfig错误-“内存不足”

来自分类Dev

mysql内存不足错误

来自分类Dev

NetBeans内存不足错误

来自分类Dev

Fontconfig错误-“内存不足”

来自分类Dev

ConnectionQueueStatsProvider的内存不足错误

来自分类Dev

ShowCaseView内存不足错误

来自分类Dev

内存不足错误 imageview

Related 相关文章

  1. 1

    GL错误:尝试使用VBO渲染时内存不足

  2. 2

    尝试使用 df.idxmax 时内存不足

  3. 3

    在Matlab中使用'。*'操作时出现内存不足错误

  4. 4

    使用AnimationDrawable时出现内存不足错误

  5. 5

    在recyclerview中使用位图时出现内存不足错误

  6. 6

    内存不足错误-尝试使用Win API检查ErrorHandler中的内存使用情况

  7. 7

    内存不足错误-尝试使用Win API检查ErrorHandler中的内存使用情况

  8. 8

    使用Android位图的内存不足错误

  9. 9

    使用ImageView的内存不足错误

  10. 10

    使用Fortify的PermGen内存不足错误

  11. 11

    使用perl()时MATLAB内存不足

  12. 12

    使用cupy时内存不足

  13. 13

    使用Android位图时内存不足

  14. 14

    尝试启动Windows Phone模拟器时出现“内存不足...”错误

  15. 15

    尝试从父文档包含jQuery时,IE(any)和Firefox中出现内存不足错误

  16. 16

    尝试启动Windows Phone模拟器时出现“内存不足...”错误

  17. 17

    尝试在Raspberry Pi 3B上运行Lancache时出现“内存不足” Nginx错误

  18. 18

    vi错误| 内存不足以进行撤消的行-尝试使用ed

  19. 19

    Volley内存不足错误,奇怪的分配尝试

  20. 20

    尝试持久化数据帧时内存不足

  21. 21

    使用viewpager + imageview时出现内存不足错误,即使使用缓存和asynctask

  22. 22

    getDrawable()的内存不足错误

  23. 23

    Fontconfig错误-“内存不足”

  24. 24

    mysql内存不足错误

  25. 25

    NetBeans内存不足错误

  26. 26

    Fontconfig错误-“内存不足”

  27. 27

    ConnectionQueueStatsProvider的内存不足错误

  28. 28

    ShowCaseView内存不足错误

  29. 29

    内存不足错误 imageview

热门标签

归档