Ограничения формата текстур OpenGL

Существуют ли определенные ограничения по формату, которым должны придерживаться текстуры?

Я загружаю файлы TGA и рисую их с помощью следующего фрагментного шейдера:

varying vec2      v_texCoord;
uniform sampler2D s_texture;
uniform vec4      vColor4;

void main()
{
  vec4 tmpColor = texture2D( s_texture, v_texCoord );

  tmpColor.r = vColor4.r;
  tmpColor.g = vColor4.g;
  tmpColor.b = vColor4.b;

  gl_FragColor = tmpColor;
}

Я считаю, что изображения 16x16 отображаются нормально. Дисплей 64x16 в порядке. 72x16, 80x16 и 96x16 не работают.

Я предоставлю больше информации, включая файлы TGA, если это необходимо.

1 ответ

Решение

72, 80 и 96 не являются степенью двойки; это требование имеет мало общего с форматом данных в OpenGL ES. Это требование действительно распространено даже в современных настольных GL, где оно может зависеть от используемого формата данных.

Несжатые данные текстуры в (настольном) OpenGL 2.0 или более поздней версии могут иметь размерность не в два раза.

Однако сжатые данные текстуры по-прежнему требуют размеров блоков, кратных 4, функции передачи пикселей продолжают предполагать выравнивание данных по 4 байта для каждой строки в изображении, текстуры с плавающей запятой, если они поддерживаются, могут также потребовать степени двух и т. Д. на.

Многие библиотеки изображений, разработанные для GL, на самом деле масштабируют вещи до степени двойки, что может решить каждую из проблем, обсужденных выше. Это не всегда самый подходящий способ (он может быть чрезвычайно расточительным), чтобы исправить проблемы с размерами, но он может применяться повсеместно практически к любой общей проблеме измерения.

Другие вопросы по тегам