Formatos de textura compactada por GPU, como DXT / BC / ETC, são projetados especificamente para serem lidos diretamente de sua forma compactada. Eles não precisam ser descompactados em um buffer RGBA bruto.
A maneira como isso funciona é que cada bloco de texels (geralmente 4x4) ocupa um número fixo de bits - portanto, sabemos exatamente quanto tempo no buffer procurar um texel específico - e esses blocos podem ser descomprimidos sem ler todos os arredores / informação de textura anterior. As GPUs contêm hardware especializado que descompacta apenas os blocos texel solicitados conforme necessário para atender às solicitações de amostragem de textura de seus shaders.
Isso contrasta com formatos como jpg e png, onde a quantidade de espaço que cada texel ocupa pode variar na imagem (áreas detalhadas ocupando mais dados, áreas previsíveis ocupando menos), portanto, para encontrar um texel específico, é necessário descompactar a imagem inteira, ou pelo menos grandes / distribuídos pedaços dela. Mas como eles podem compactar seletivamente áreas previsíveis de uma textura, tendem a compactar imagens em tamanhos menores para armazenamento em disco ou transmissão em uma rede do que as obtidas em formatos compatíveis com GPU. Diferentes estratégias para diferentes usos.
Geralmente, várias perguntas devem ser feitas por meio de várias postagens, mas como essa é uma resposta bastante curta, também atingirei o ponto 3:
" Framebuffer " é apenas uma parte específica da memória de vídeo que decidimos usar para armazenar a imagem composta que queremos apresentar na tela. Observe os detalhes na resposta de JarkkoL, onde em algum hardware especializado podemos escolher localizar esse buffer em uma parte específica de nossa memória de vídeo disponível, otimizada para as necessidades de largura de banda dos destinos de renderização.