EXC_BAD_ACCESS при использовании VBO - PullRequest
1 голос
/ 30 сентября 2011

Я сделал рендеринг без использования VBO.Теперь я хочу добавить VBO для более сложного рендеринга.Сейчас я просто создаю VBO, сохраняя старый рендеринг, как это было, и теперь я ничего не рендеринг с VBO.Вот код:

GLuint bufId;
glGenBuffers(1, &bufId);
glBindBuffer(type, bufId);
glBufferData(type, size, 0, GL_STATIC_DRAW);
//size = 100000;

Это единственный код о VBO.Но если последний штрих не комментируется, тогда я получаю EXC_BAD_ACCESS в старом рендеринге при рисовании GL_TRIANGLE_STRIP.Я поставил glGetError() перед этим плохим доступом, и он возвращает 0. В чем проблема?спасибо

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

EXC_BAD_ACCESS означает, что вы пытались читать или записывать в память, которая не была сопоставлена ​​с вашим процессом.

Существует множество способов, которыми это может произойти, и glGetError () не знает об этом.

Я написал этот блог, который пытается помочь вам отладить его. Это было для iPhone, но все в нем относится и к приложениям Mac.

http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

Ключевым моментом является то, что EXC_BAD_ACCESS не должен возникать в момент ошибки - ошибка, вызвавшая его, могла уже запуститься, и в ответ происходит неправильный доступ - точка сбоя может быть не связана совсем. Мой блог проходит некоторые методы отладки, чтобы выяснить, где на самом деле проблема. Например, это может не иметь ничего общего с GL.

В вашем коде, каково значение size и type? Это может не иметь к этому никакого отношения.

Некоторые вещи, которые нужно проверить во всем коде, который работал до этого момента.

  1. Дабл-фри
  2. чтение / запись за пределы массива
  3. Плохие броски
1 голос
/ 30 сентября 2011

Я нашел проблему.Вы должны отменить привязку VBO, если хотите рисовать без него:

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

, после этого все заработало

...