OpenGL ES 2.0: лучше дополнить пиксели текстуры, чем использовать плотно упакованные данные? - PullRequest
2 голосов
/ 20 октября 2011

Я только что видел пример текстуры, который содержит код:

GLubyte pixels[4 * 3] =
{
  255,  0,   0,  // Red
  0,  255,   0,  // Green
  0,    0, 255,  // Blue
255,  255,   0   // Yellow
};

// Use tightly packed data.
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

Не лучше ли было бы дополнительно сохранить один компонент заполнения на пиксель и задать 4-байтовое выравнивание?

Прошу из интереса к производительности.

Большое спасибо

1 Ответ

1 голос
/ 16 января 2012

Я некоторое время играл с ним и пришел к (ожидаемому) выводу. Немного (примерно на 10% быстрее) иметь выравниваемые по 4 байта пиксели при загрузке собственного формата пикселей (например, RGB565 или RGB5_A1). Это только немного быстрее (например, 1%) при загрузке других форматов пикселей (RGB8 или RGBA8).

То же самое было и с видеокартами класса ПК: если загружать родную BGRA8 (NVIDIA), выравнивание может иметь какое-то значение, но в случае, если драйверу необходимо перебрасывать данные или выполнять сдвиг битов, он не сделать так много различий.

Я тестировал загрузку 256x256 RGB-текстуры с выравниванием по 3 или 4 байта, 100 раз. Текстуры были удалены между тестами. Тесты содержали glFlush () и glFinish (), поэтому не было ожидающих операций не по порядку.

...