Давайте начнем с основ:
float data[][2] = {{50,50},{100,50},{75,100}};
Это массив из 3 пар чисел с плавающей точкой.Таким образом, каждая позиция вершины содержит 2 числа с плавающей точкой.С 3 вершинами, это всего 6 поплавков.
glVertexPointer(3, GL_FLOAT, 3*sizeof(float), 0);
Вы говорите OpenGL, что вы даете ему 3 поплавка на вершину (первые 3).Вы поместили 6 поплавков в буферный объект.Поскольку вы визуализируете один треугольник, вам нужно 3 вершины, что означает, что OpenGL будет пытаться прочитать девять с плавающей точкой.
Действительно, вы, кажется, как-то скопировали это неправильно, как оригиналодин из них верен для данных:
glVertexPointer(2, GL_FLOAT, 2*sizeof(float), 0);
Теперь это может быть не единственной ошибкой в вашем коде, так как вы не опубликовали процедуры инициализации, которые использовались в ответе, с которым вы связались.Учитывая, что вы поместили код из функции «init» ответа в функцию «dirtyRect», я предполагаю, что у вас есть большие проблемы.
Есть причина, по которой в ответе были отдельные индикации «init» и «display»».Потому что некоторые вещи - это инициализация (создание объекта буфера и установка различных состояний), в то время как другие вещи - это то, что вы делаете каждый раз (очистка буфера, установка указателя и glDrawArrays).
Вы должны найтиспособ сохранить это отделение инициализации от обновления в вашем коде.