2009-09-04 2 views
2

OpenGL ES 1.1 любит сбой моей программы для iPhone, если что-то идет не так.Как отлаживать ошибки OpenGL ES?

Обычно это происходит где-то внутри glDrawArrays, с несколькими вызовами glDestroyContext на стек.

Обычно я рассекает проблему вставив

{ 
    GLint iErr = glGetError(); 
    if (iErr != GL_NO_ERROR) 
    { 
    NSLog(@"GL error: %d (0x%x)", iErr, iErr); 
    } 
} 

повсюду.

Однако иногда этого недостаточно. Есть ли другие способы получить полезную диагностику по причинам сбоя?

ответ

0

Получены ли сообщения об ошибках на выходе консоли? Просто из описания, интересно, вы получаете исключение BAD_ACCESS. Если мое предположение верно, вы, вероятно, передаете плохой массив в glVertexPointer, glColorPointer или одну из других связанных функций.

Правильно ли я полагаю, что он умирает в glDrawArrays и никогда не возвращается? Другими словами, нет способа позвонить glGetError после glDrawArrays, потому что программа уже разбилась?

+0

Никаких дополнительных сообщений консоли (то есть в стороне от типа сбоя - это, как правило, плохой доступ). Обычно это либо некоторые плохие входные данные, либо я забыл включить какое-то состояние. Но для того, чтобы найти то, что было неправильно, нужно время. Обычно мне приходится прибегать к двоичному поиску. :( –

+0

Я бы проверял, чтобы вы не пытались рисовать больше треугольников, чем содержат ваши буферы. Похоже, что OpenGL попадает в память, а это, вероятно, означает, что вы сказали, что у вас больше вершин, чем вы действительно имеете в буфере. –