glTexSubImage2D очень медленно работает на видеокарте Intel

Моя видеокарта - Mobile Intel 4 Series. Я обновляю текстуру с изменением данных каждый кадр, вот мой основной цикл:

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, и там она работает быстро. У моего реального приложения есть проблемы с производительностью на картах сторонних производителей, которые устраняются вызовами glFlush, но я еще не отогнал их до тестового примера.

Есть идеи, как это отладить?

10
задан Stefan Monov 18 October 2011 в 13:40
поделиться