Графические форматы сжатых текстур, такие как DXT / BC / ETC , специально разработаны для чтения непосредственно из сжатой формы. Их не нужно распаковывать в необработанный буфер RGBA.
Это работает так, что каждый блок текселей (часто 4х4) занимает некоторое фиксированное число битов - поэтому мы точно знаем, как далеко в буфере искать конкретный тексель - и эти блоки могут быть распакованы без чтения всего окружения / предшествующая текстура информации. Графические процессоры содержат специализированное оборудование, которое распаковывает только требуемые блоки текселей, необходимые для выполнения запросов на выборку текстур от ваших шейдеров.
Это отличается от форматов, таких как jpg & png, где объем пространства, занимаемого каждым текселем, может варьироваться по изображению (детализированные области занимают больше данных, предсказуемые области занимают меньше), поэтому для поиска конкретного текселя вам нужно распаковать целое изображение или, по крайней мере, большие / распределенные его фрагменты. Но поскольку они могут выборочно сжимать предсказуемые области текстуры, они, как правило, сжимают изображения до меньших размеров для хранения на диске или передачи по сети, чем то, что мы получаем из форматов, дружественных к GPU. Разные стратегии для разных целей.
Как правило, задавать несколько вопросов нужно с помощью нескольких сообщений, но так как это довольно короткий ответ, я также затрону пункт 3:
« Framebuffer » - это просто определенный фрагмент видеопамяти, который мы решили использовать для хранения составного изображения, которое мы хотим представить на экране. Обратите внимание на детали в ответе JarkkoL, где на некотором специализированном оборудовании мы могли бы выбрать размещение этого буфера в определенной части нашей доступной видеопамяти, которая оптимизирована для потребностей полосы пропускания целей рендеринга.