Моя видеокарта - мобильная Intel 4 серии.Я обновляю текстуру, меняя данные каждый кадр, вот мой основной цикл:
for(;;) {
Timer timer;
glBindTexture(GL_TEXTURE2D, tex);
glBegin(GL_QUADS); ... /* draw textured quad */ ... glEnd();
glTexSubImage2D(GL_TEXTURE2D, 0, 0, 0, 512, 512,
GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, data);
swapBuffers();
cout << timer.Elapsed();
}
Каждая итерация занимает 120 мс.Тем не менее, вставка glFlush до glTexSubImage2D приводит к увеличению времени итерации до 2 мс.
Проблема не в формате пикселя. Я пробовал использовать форматы пикселей BGRA, RGBA и ABGR_EXT вместе с пикселем.типы UNSIGNED_BYTE, BYTE, UNSIGNED_INT_8_8_8_8 и UNSIGNED_INT_8_8_8_8_EXT.Внутренний пиксельный формат текстуры - RGBA.
Порядок вызовов имеет значение. Перемещение загрузки текстуры перед четырехугольным рисунком, например, исправляет медлительность.
Я такжепопробовал это на карте GeForce GT 420M, и там он работает быстро.У моего реального приложения есть проблемы с производительностью на картах не-Intel, которые исправляются вызовами glFlush, но я еще не перевел их в тестовый пример.
Есть какие-нибудь идеи о том, как это отладить?