Framebuffer

Conjunto de dados armazenados temporariamente na placa de vídeo em forma de matriz. Esses dados serão usados para exibir os frames na tela do monitor.

Categoria de Tecnologia

Postado em 13 fevereiro 2023

Atualizado em 13 fevereiro 2023

Palavras-chave: computador,pc,cpu,processador,dados,conjunto,frames,monitor,video,matriz,armazenamento

Visualizações: 1415



A digitalização de informação em dados binários é uma técnica que permite voltarmos no tempo. Uma foto ou vídeo possuem um conjunto de dados que representam imagens que podem ser exibidas na tela de um computador.

No processo de exibição de imagens na tela de um computador, as informações que serão exibidas na tela precisam ser armazenadas temporariamente na memória do computador. O responsável por esse processo é o framebuffer.

O que é o framebuffer?

O framebuffer é a memória que armazena as cores de cada pixel que compõem uma imagem na tela de um dispositivo. Geralmente, essa memória fica situada na memória de vídeo de modo separado da memória RAM principal do computador. Em computadores mais antigos, os dados do framebuffer eram armazenados na memória principal, dividindo espaço com outras tarefas do sistema. Isso limitava a qualidade da imagem na época que tinha que compartilhar espaço na memória.

Os dados do framebuffer são armazenados em matriz. Cada elemento da matriz representa um pixel na tela do dispositivo. Cada pixel tem uma sequência de bytes que contém informações de cor e transparência (lembrando que cada byte tem 8 bits). Quanto mais bits por elemento, mais profundidade terá a cor, dando uma impressão mais realista. Os modos de cores variam entre 8, 16 e 32 bits. O sistema de cor RGB (vermelho, verde e azul) usa 8 bits por cor, tendo um total de 24 bits (3 bytes) por pixel e pode chegar a ter 16,777,216 variações de cor, como mostra a conta abaixo:

  • RGB = 2828282^{8} * 2^{8} * 2^{8}
  • RGB = 2242^{24}
  • RGB = 16,777,216

O RGB também é bastante conhecido pela sequência de números (255, 255, 255), modelo bastante usado em linguagens de programação. O zero também é contado, por essa razão são 3 três valores com capacidade de 256 níveis de intensidade de vermelho, verde e azul.

sistema de cor rgb framebuffer

O número de elementos em uma matriz depende da largura, altura e profundidade de cor. Uma tela de computador com largura de 1,280 pixels e 720 pixels de altura teria um valor total de 921,600 pixels. Esse valor total é exibido na tela 1 vez por frame. A tela do computador, geralmente é atualizada 60 vezes por segundo, isso é 60 FPS (Frames per second), ou 60 Hz (Hertz). Ou seja, a tela atualiza uma vez a cada 0,016 segundos (16 milissegundos). Em outras palavras, um dispositivo com uma tela de resolução 1280x720 exibiria um total de 55,296,000 pixels por segundo. Cada segundo necessitaria de 165 megabytes de espaço no framebuffer para a exibição de conteúdo

  • Espaço necessário por segundo: 1280 pixels * 720 pixels * 60 FPS * (24 RGB bits / 8 bits)
  • Espaço necessário por segundo: 92160 pixels * 60 FPS * (24 RGB bits / 8 bits)
  • Espaço necessário por segundo: 55,296,000 pixels por segundo * (24 RGB bits / 8 bits) bytes
  • Espaço necessário por segundo: 165,888,000 bytes por segundo
  • Espaço necessário por segundo: 165 megabytes por segundo

Geralmente, quando uma imagem é armazenada na memória auxiliar da máquina, ela é compactada (comprimida), tendo um tamanho bem menor e salvando mais espaço na memória de armazenamento. No caso do framebuffer, essa compressão não acontece, portanto os dados de imagens armazenados no framebuffer são brutos.

A largura de banda da memória do GPU (Graphics processing unit) de computadores modernos podem processar uma grande quantidade de dados por segundo. Alguns exemplos são:

GPU Video RAM Largura de banda
P4000 8GB GDDR5 243 GB/s
RTX5000 16GB GDDR6 448 GB/s
A100 40GB HBM2 1555 GB/s

Como funciona o framebuffer?

O framebuffer envia informações de forma contínua para a placa gráfica, que irá converter os dados para um formato externo, como VGA ou HDMI. Finalmente, esses dados são transmitidos e exibidos no monitor.

Framebuffer
Placa gráfica
Monitor

A frequência padrão utilizada é de 60Hz, mas pode ser modificada para valores como 30Hz ou 120Hz. Quanto maior a frequência melhor é a qualidade da imagem, porém o consumo de energia também aumenta.

A geração de dados que são armazenados no framebuffer vem do processador. O processador pode receber dados de dispositivos de entrada que irão mudar o conteúdo que aparece na tela. O controle e gerenciamento do framebuffer é realizado por uma placa de vídeo ou outro hardware responsável. Na maioria das vezes, o processador trabalho junto com a placa de vídeo para produzir o conteúdo que é exibido na tela.

framebuffer e processador

História do framebuffer

O framebuffer apareceu pela primeira vez em 1972. Desde então, os dados de exibição de imagens compartilhavam o mesmo espaço da memória principal. Outra técnica bastante utilizada na época era o “scan line”.

Muitos monitores modernos ainda usam a técnica de scan line que desenha linhas horizontais na tela. Essa técnica é usada desde a época dos monitores CRT. CRT é a sigla para “Cathodic Ray Tube”, em português, “Tubo de raios catódicos”.

monitor crt antigo

Na traseira do monitor tinha uma canhão de elétrons (canhão eletrônico) que disparava feixes de elétrons em cada linha da tela. Esse processo era repetido em todas as linhas da tela, formando a imagem que era exibida.

scan line

Ao se aproximar da tela, era possível enxergar as linhas que formavam a imagem. Entre as linhas, existia um pequeno espaço preto.

scan line espaços entre as linhas

Conclusão

O framebuffer é um conjunto de dados que geralmente é armazenado temporariamente na placa de vídeo em forma de matriz. Esse conjunto de dados é as informações que serão exibidas na tela a cada frame. Em computadores antigos, esses dados compartilhavam o mesmo espaço que a memória principal, limitando a qualidade da imagem pela falta de espaço.

Projetos práticos

Caixa eletrônico usando arquitetura limpa

Usando JavaFX e arquitetura limpa para criar um aplicativo de caixa eletrônico extremamente simples.

Criando um sistema de integração contínua (CI/CD)

Fazendo a integração contínua de Jenkins, Sonatype Nexus, Sonatype, JUnit e Gradle para automatizar processos repetitivos. Prática bastante usada em tecnologias de DevOps.

Criando um sistema de mini garagem automatizada integrada com um sistema de monitoramento independente

Desenvolvimento de um sistema de monitoramento que exibi todos os eventos que acontecem na garagem automatizada, como abertura de portões ou ocupação de vagas.

Criando artes de texto usando imagens

Convertendo imagens para ascii art usando o valor da intensidade das cores cinzentas.

Tutorial de programação do jogo da serpente em javascript

Programando o clássico jogo da serpente usando o framework p5.js. Tutorial indicado para iniciantes da programação que querem aprender os conceitos básico da área criando jogos.

Veja também

Qual é o papel das grandes empresas além de fornecer seu serviços?

Poluição do ar, solo e água ainda é um grande problema para ser resolvido ainda em vários países. Há estudos que comprovam que os países mais poluentes podem causar câncer...

A comunicação entre dispositivos existe graças aos protocolos

Alguns desses protocolos é o HTTP que usamos em nossos navegadores. Sem esses protocolos teríamos alguns problemas na comunicação de dispositivos através da internet.

LPWA Low Power Wide Area

LPWA é a abreviação de Low Power Wide Area. LPWA é um modo de comunicação wireless entre dispositivos. É principalmente utilizado em dispositivos IoT.

SaaS (Software as a Service)

Serviço disponível na internet que oferece softwares que permitem realizar atividades como verificar e-mails, armazenar fotos e compartilhar arquivos.

LAN

Rede local de computadores (LAN) é um conjunto de computadores ou dispositivos conectados uns aos outros de forma isolada em um pequeno local.

Steering Behaviors (Comportamentos de navegação)

Conjunto de técnicas de algoritmo que simulam comportamentos realísticos. Usado em jogos e em pesquisas biológicas para o estudo de comportamentos.