# Framebuffer

Framebuffer, o memoria de cuadre o de fotograma, és una categoria de dispositius gràfics, que representen cada un dels píxels de la pantalla com ubicacions a la memòria d'accés aleatori. També és conegut d'aquesta manera però en l'àrea dels sistemes operatius, a tots els dispositius que usen o aparenten usar aquest mètode d'accés a dispositius gràfics.
La informació continguda en el framebuffer consisteix típicament en els valors de color per a cada píxel que es mostra a la pantalla. Els valors de color s'emmagatzemen comunament en 1 bit binari (blanc i negre), 4 bits de paleta, de 8 bits de paleta, color d'alta densitat de 16 bits i veritables formats de color de 24 bits. Un canal alfa addicional s'utilitza de vegades per retenir informació sobre la transparència de píxels. La quantitat total de memòria necessària per a l'ús d'aquest dispositiu depèn de la resolució del senyal de sortida, així com de la grandària i la profunditat de color de la paleta.

## Història

Els informàtics van discutir durant molt de temps els avantatges de l'ús d'aquest dispositiu, però no van ser capaços de produir una màquina amb suficient memòria a un cost econòmicament viable. El 1969, Michael A. Noll dels Laboratoris Bell va implementar una pantalla digitalitzada amb una memòria de fotograma intermèdia. Més tard, el sistema de Bell Labs va ser ampliat per mostrar una imatge amb una profunditat de color de tres bits en un monitor de televisió en color estàndard. Fins i tot una pantalla abans escanejada es va dur a terme al Laboratori Nacional de Brookhaven. Els avenços en la memòria de circuit integrat en la dècada de 1970 van fer més cost pràctic per crear framebuffers capaços d'emmagatzemar una imatge de vídeo estàndard.
El 1972, Richard Shoup va desenvolupar el sistema SuperPaint en Xerox PARC. Aquest sistema tenia 311,040 bytes de memòria i era capaç d'emmagatzemar 640 per 480 píxels de dades de 8 bits de profunditat de color. La memòria es dispersa a través de 16 plaques de circuits, cadascun carregat amb múltiples 2-kilobit fitxes de registre de desplaçament. Aquest disseny requereix que el framebuffer total hagi de ser implementat com un registre de desplaçament de 307.200 bytes, que es va moure en sincronització amb el senyal de sortida de televisió. El principal inconvenient d'aquest sistema era que la memòria no era d'accés aleatori.
Shoup també va ser capaç d'utilitzar el framebuffer SuperPaint per crear un sistema de captura de vídeo digitals. Mitjançant la sincronització del senyal de sortida del senyal d'entrada, Shoup era capaç de sobreescriure cada píxel de dades a mesura que anava movent-se. Shoup també va experimentar amb la modificació del senyal de sortida utilitzant les taules de colors. Aquestes taules de colors permetien que el sistema SuperPaint produís una àmplia varietat de colors fora de la gamma de les dades de 8 bits limitada que contenia. Aquest esquema seria més tard convertit en alguna cosa comuna en els framebuffers informàtics.
En 1974, Evans & Sutherland va llançar el primer ús comercial d'aquest dispositiu, que costava al voltant de $15.000. Va ser capaç de produir una resolució de fins a 512 per 512 píxels en escala de grisos de 8 bits, i va esdevenir una gran ajuda per als investigadors gràfics que no tenien els recursos per construir el seu propi dispositiu. L'Institut Tecnològic de Nova York més tard va crear el primer sistema de color de 24 bits utilitzant tres dels framebuffers d'Evans & Sutherland. Cada ús d'aquest dispositiu es connectava a una sortida de color RGB (un per al vermell, un altre per al verd i un per al blau), amb un miniordinador Digital Equipment Corporació PDP 11/04, tenint un control dels tres dispositius en un.
En 1975, la companyia britànica Quantel va produir la primera emissió a tot color framebuffer comercial: el Quantel DFS 3000. Va ser utilitzat per primera vegada en la cobertura televisiva dels Jocs Olímpics de Montreal 1976 per generar una inserció d'imatge-en-imatge de la torxa olímpica, mentre que en la resta de la imatge apareixia el corredor entrant a l'estadi.
La ràpida millora de la tecnologia de circuits integrats va fer possible que molts dels ordinadors personals de la dècada de 1970 (com l'Apple II) disposessin de framebuffers a color. Encara que al principi es van burlar dels mals resultats en comparació amb els dispositius gràfics més sofisticats utilitzats en els ordinadors com l'Atari 400, amb el temps els framebuffers es van convertir en l'estàndard per a tots els ordinadors personals. Avui en dia, gairebé tots els ordinadors amb capacitats gràfiques utilitzen aquest dispositiu per a la generació del senyal de vídeo.
Els framebuffers també es van fer popular a les estacions de treball de gamma alta i a les plaques del sistema de jocs electrònics al llarg de la dècada de 1980. SGI, Sun Microsystems, HP, DEC i IBM van fer servir framebuffers pels seus ordinadors de treball. Aquests framebuffers eren en general d'una qualitat molt més alta que la que es podia trobar en la majoria dels ordinadors personals, i s'utilitzaven regularment a la televisió, la impressió, el modelatge per ordinador i als gràfics en 3D. Els framebuffers també van ser utilitzats per Sega pels seus jocs d'arcade d'alta gamma, que també eren d'una qualitat més alta que en els ordinadors personals.
Els ordinadors Amiga, amb un disseny de gran rendiment dels gràfics, va crear a la dècada de 1980 un vast mercat de les targetes gràfiques basades framebuffer. Digne de menció va ser la targeta gràfica en Amiga A2500 Unix, que va ser al 1991 la primera computadora per posar en pràctica un programa de servidor X11 com un servidor per allotjar entorns gràfics i la interfície gràfica OPEN LOOK, interfície d'usuari d'alta resolució (1024x1024 o 1024x768 a 256 colors). La targeta gràfica per a A2500 Unix va ser anomenada A2410 (targeta gràfica TIGA Lowell) i era una targeta de gràfics de 8 bits basat en el Texas Instruments TMS34010 de 50 MHz. Va ser una complet coprocessador de gràfics intel·ligents. La targeta gràfica per a Amiga A2410 va ser co-desenvolupada amb la Universitat de Lowell.
Altres targetes gràfiques notables basades en els framebuffers Amiga van ser: la targeta gràfica Impact Vision IV24 de GVP; la DCTV, un adaptador de gràfics extern i amb sistema de captura de vídeo; la targeta gràfica Firecracker 32-bit; la targeta Harlequin, ColorBurst; el framebuffer extern HAM-E. La targeta gràfica externa Graffiti està encara disponible al mercat.
La majoria de framebuffers Atari ST (Mega model STE), i Atari TT van ser creats per a la ranura del connector VME de màquines d'Atari dedicada a les targetes d'expansió de vídeo: l'adaptador de gràfics Leonardo 24-bits VME, la targeta gràfica CrazyDots II VME de 24 bits, la targeta gràfica Spektrum TC, la targeta gràfica NOVA ET4000 VME SVGA (capaç de tenir resolucions de fins a 1024x768 a 256 colors o 800x600 a 32768 colors), el disseny del qual prové del món ISA / PC.

## Modes de visualització

Els framebuffers que s'usen en ordinadors personals moltes vegades tenen un conjunt de "modes" sota els quals el framebuffer pot ser operatiu. Aquestes maneres reconfiguren automàticament el hardware amb l'objectiu de mostrar diferents resolucions, profunditat del color, dissenys de memòria i taxes de refresc.
En el món d'Unix (les màquines i els sistemes operatius) aquestes convencions normalment van ser evitades a favor d'una manipulació directa de la configuració del hardware. Aquesta manipulació era molt més flexible de manera que qualsevol resolució, profunditat de color i taxa de refresc podia aconseguir (limitant-se únicament per la memòria disponible pel framebuffer).
Un efecte col·lateral d'aquest mètode era que el visualitzador podia ser portat més enllà de les seves capacitats. En alguns casos provocant danys al propi hardware de visualització. Els monitors CRT moderns corregeixen aquest problema introduint circuits de protecció "intel·ligents". Quan es canvia de manera de visualització, el monitor intenta obtenir un senyal de sincronització en la nova freqüència de refresc. Si el monitor no és capaç d'obtenir un senyal de sincronització, o si el senyal està fora del rang de les seves limitacions de disseny, el monitor ignora el senyal de framebuffer i segurament mostrarà un missatge d'error a l'usuari.
Els monitors de cristall líquid tendeixen a contenir circuits de protecció similars, però per raons diferents. Com aquests han de mostrejar digitalment el senyal de visualització, qualsevol senyal que estigui fora del seu rang no pot ser visualitzada físicament en el monitor.

## Paleta de color

Els framebuffers tradicionalment han donat suport a una àmplia varietat de modes de color. A causa del cost de la memòria, la majoria dels primers framebuffers utilitzen 1-bit (2-color), 2 bits (4 colors), 4 bits (16-color) o profunditat de color de 8 bits (256 colors). El problema amb aquest tipus de petites profunditats de color és que una àmplia gamma de colors no es pot produir. La solució a aquest problema va ser la d'afegir una taula de consulta per als framebuffers. Cada "color" emmagatzemat a la memòria framebuffer actuaria com un índex de color; aquest esquema es denomina de vegades "color indexat".
La taula de consulta servia com una paleta que contenia dades per definir un nombre limitat (per exemple, 256) de diferents colors. No obstant això, cada un d'aquests colors en si van ser definit per més de 8 bits, tal com 24 bits, vuit d'ells per a cada un dels tres colors primaris. Amb 24 bits disponibles, els colors poden definir-se molt més subtil i exactament, a més d'oferir la gamma completa que la pantalla pot mostrar. Si bé té un nombre total limitat de colors d'una imatge, però, poden ser ben triats, i aquest esquema és marcadament superior a color de 8 bits.
Les dades de l'ús d'aquest dispositiu en aquest esquema determina quin dels colors a la paleta són per al píxel actual, i les dades emmagatzemades a la taula de consulta (de vegades anomenat el "LUT") van ser tres convertidors de digital a analògic per crear el senyal de vídeo per la pantalla.
Les dades de sortida del framebuffer, en lloc de proporcionar informació sobre els colors primaris relativament rudimentaris, serveixen com un índex per triar una entrada a la taula de consulta. En altres paraules, l'índex determina que color, i les dades de la taula de consulta determinen precisament quin color s'utilitzarà per al píxel actual.
En alguns dissenys que també era possible escriure dades a la LUT (o variar entre les paletes existents), el que permet dividir la imatge en forma de barres horitzontals amb la seva pròpia gamma de colors i d'aquesta manera fer que una imatge tingui una molt més àmplia paleta.

## Memòria d'accés

Mentre als framebuffers s'accedeix habitualment a través d'un mapatge de memòria existent directament a l'espai de memòria de la CPU, aquest no és l'únic mètode pel qual es pot accedir. Els framebuffers han variat àmpliament en els mètodes utilitzats per accedir a la memòria, i alguns dels més comuns són:
* Mapeig de tot l'ús d'aquest dispositiu a un rang de memòria donada.
* Port de comandes per configurar cada píxel, el rang de píxels o l'entrada de la paleta.
* L'assignació d'un rang de memòria més petita que la memòria d'ús d'aquest dispositiu, que es pot canviar segons sigui necessari.
* L'organització d'ús d'aquest dispositiu pot ser alguna cosa pesada (píxel empaquetat) o plana.

## RAM a la targeta de vídeo

Les targetes de vídeo tenen sempre una certa quantitat de memòria RAM. La targeta de vídeo RAM és necessària per mantenir la imatge de la pantalla en la memòria. La CPU envia les seves dades a la targeta de vídeo, el processador de vídeo forma una imatge de la imatge de la pantalla i l'emmagatzema en la memòria RAM. La targeta gràfica també pot ser sinònim d'una GPU, una unitat processadora de gràfics, ja que una targeta gràfica ha de contenir una GPU, i una GPU requereix un tauler per a ser muntada.

## Hardware

En els dispositius gràfics de tipus framebuffer, tots i cada un dels píxels desplegats en qualsevol instant determinat a la pantalla, estan emmagatzemats en una porció de la memòria principal de l'ordinador en forma d'octets binaris. A causa que les pantalles posseeixen diferents capacitats de desplegament de colors (el que es coneix com a profunditat de color), la quantitat d'informació necessària per representar un píxel varia. Les pantalles generalment admeten 8, 15, 16 o 24 bits de profunditat de color el que equival a 256, 32.768, 65.536 o 16.777.216 colors respectivament. Per canviar la imatge present a la pantalla, només cal escriure les adreces de memòria dedicades al píxel que es vol modificar.
La zona de memòria dedicada al framebuffer és habitualment accessible per la unitat central de processament com una zona qualsevol de la memòria d'accés aleatori per a lectura i escriptura, llevat que aquesta es reserva exclusivament per al desplegament d'imatges, i és comú que se li assigni un rang mínim i màxim d'adreces fix. La memòria del framebuffer és lineal, contigua i direccionable com qualsevol altre tros de la memòria d'accés aleatori; de manera que per seleccionar un píxel donat cal conèixer la seva adreça, i per a això, calcular el desplaçament adequat a partir de l'adreça d'inici de la memòria del framebuffer.
De tal manera que l'ordinador modifica efectivament les imatges desplegades en pantalla modificant el contingut de la zona de memòria esmentada anteriorment, cosa que cap perfectament en la definició comunament acceptada del que és un framebuffer

## Sistemes operatius

El framebuffer és un dispositiu virtual del sistema operatiu que es presenta davant les aplicacions de diferents maneres en funció del sistema que parlem, encara que generalment apareix com un arxiu o un bloc de memòria d'accés aleatori reservat a l'ordinador, i que pot ser accedit en lectura/escriptura per un o més processos; en aquest arxiu o zona de memòria especial qualsevol escriptura modifica directament les imatges desplegades en el dispositiu de vídeo, perquè d'aquesta manera els programes puguin mostrar informació en pantalla sense preocupar-se dels detalls d'implantació, ni de la interacció real entre l'ordinador i el dispositiu de vídeo.
No obstant això, la idea del framebuffer s'associa més aviat amb aquells dispositius del sistema que són visibles o accessibles a les aplicacions d'usuari. En alguns sistemes operatius pot ocórrer que l'accés a la memòria del dispositiu de vídeo estigui ocult a les aplicacions, i que tota modificació de les imatges desplegades en pantalla s'efectuï per mitjà d'una API (com passa per exemple, en el cas dels sistemes operatius Windows).

## Framebuffers virtuals

Molts sistemes intenten emular la funció dels framebuffers, sovint per raons de compatibilitat. Els dos framebuffers "virtuals" més comuns són el dispositiu de framebuffer de Linux (fbdev) i el X Virtual Framebuffer (Xvfb). El X Virtual Framebuffer es va afegir a la distribució de X Windows per proporcionar un mètode per a executar X sense un framebuffer gràfic. S'utilitza sovint en els sistemes moderns per donar suport a programes com ara la JVM de Sun Microsystems, que no permeten que es generin gràfics dinàmics en un entorn sense cap framebuffer.
Després, el dispositiu de framebuffer de Linux va ser desenvolupat per abstreure el mètode físic per accedir a l'ús d'aquest dispositiu subjacent en un mapa de memòria garantit que fos fàcil tenir accés per als programes. Això augmenta la portabilitat, ja que els programes no estan obligats a fer front als sistemes on hi hanmapes de memòria inconnexos o requerir canviar de banc.

## Intercanvi de pàgines

D'ençà que els framebuffers són dissenyats per manejar més d'una resolució, sovint contenen més memòria de la que és necessària per a mostrar un sol fotograma a resolucions més baixes. Atès que aquesta memòria pot ser de mida considerable, un truc va ser desenvolupar nous marcs que s'escriuen en la memòria de vídeo per permetre mostrar el que s'està veient sense pertorbar la trama.
El concepte funciona dient-li al framebuffer d'utilitzar un tros específic de la seva memòria per mostrar el quadre actual. Mentre que la memòria està mostrant, una part completament separada de la memòria s'omple amb les dades per a la següent trama. Una vegada que s'omple el buffer secundari (normalment referit com el "back buffer"), el framebuffer és instruït per mirar el buffer secundari. El buffer primari (típicament referit com el "front buffer") es converteix en el buffer secundari, i el buffer secundari es converteix en el principal. Aquest interruptor es fa sovint després que de l'interval d'esborrat vertical per evitar un "esquinçament" de la pantalla.
La majoria de framebuffers moderns estan fabricats amb memòria suficient per realitzar aquest truc, fins i tot a altes resolucions. Com a resultat, s'ha convertit en una tècnica estàndard utilitzada pels programadors de jocs de PC.

## Acceleradors gràfics

A mesura que augmenta la demanda de millors gràfics, els fabricants de hardware creen una forma de disminuir la quantitat de temps de CPU requerit per omplir el framebuffer. Això es coneix comunament com "gràfics d'acceleració".
Els comandaments més comuns dels gràfics de dibuix s'envien a l'accelerador de gràfics en la seva forma crua. L'accelerador a continuació rasteriiza els resultats de la comanda al framebuffer. Aquest mètode pot estalviar milers o milions de cicles de CPU per sistema, i la CPU queda lliure per a altres tasques.
Mentre que els primers acceleradors se centren en millorar el rendiment dels sistemes GUI 2D, la majoria dels acceleradors moderns se centren en la producció d'imatges 3D a temps real. Un disseny comú és enviar comandes a l'accelerador de gràfics utilitzant una biblioteca com ara OpenGL o Direct3D. El controlador de gràfics després tradueix aquests comandaments amb les instruccions per a la unitat de processament gràfic de l'accelerador (GPU). La GPU utilitza aquestes microinstruccions per calcular els resultats rasteritzats. El senyal de la framebuffer es produeix a continuació, en combinació amb dispositius incorporats de superposició de vídeo (en general utilitzats per produir el cursor del ratolí sense modificar les dades del framebuffer) i efectes especials analògics que són produïts per la modificació del senyal de sortida.
Hi va haver un temps en què hi havia molts fabricants d'acceleradors gràfics, incloent: 3dfx; ATI; Hercules; Trident; Nvidia; Radius; S3 Graphics; SiS i Silicon Graphics. A partir de l'any 2015, el mercat dels acceleradors gràfics per a sistemes basats en x86 està dominat per Nvidia (comprat 3dfx de 2002), AMD (ATI que va comprar en 2006) i Intel (que actualment produeix només GPU integrades en lloc de targetes de vídeo discretes).

## Comparacions amb altres tecnologies

Els framebuffers es diferencien significativament dels vectors, que eren comuns abans de l'arribada de gràfics més ràpids (i, en conseqüència, amb el concepte d'un framebuffer). Amb una pantalla de vector, s'emmagatzemen només els vèrtexs de les gràfiques primitives. El feix d'electrons de la pantalla de sortida se li ordena a saltar de vèrtex a vèrtex, traçant una línia analògica a través de l'àrea entre aquests punts. Amb l'ús d'aquest dispositiu, al feix d'electrons se li ordena traçar una línia d'esquerra a dreta i de dalt a baix en tota la pantalla: la forma en què una televisió fa que un senyal d'emissió. La informació de color per a cada punt que d'aquesta manera es mostra a la pantalla s'extreu de l'ús d'aquest dispositiu: la creació d'un conjunt d'elements d'imatge discrets, és a dir, píxels.
De la mateixa manera, els framebuffersel diferencien de la tecnologia utilitzada en les primeres pantalles de text, on un memòria intermèdia conté els codis per als caràcters, no els píxels individuals. El dispositiu de visualització de vídeo condueix el feix d'electrons en un patró de trama, el mateix que amb un framebuffer, però genera els píxels de cada caràcter a la memòria intermèdia, ja que dirigeix el feix.

## Referències

* ↑ Noll, A. Michael, "Scanned-Display Computer Graphics," Bell Telephone Laboratories, Technical Memorandum, TM69-1234-8, November 21, 1969.
* ↑ Noll, A. Michael, “Scanned-Display Computer Graphics,” Communications of the ACM, Vol. 14, No. 3, (March 1971), pp. 145-150.
* ↑ Ophir, S., S. Rankowitz, B. J. Shepherd, and R. J. Spinrad, "BRAD: The Brookhave Raster Display," Comm. ACM, Vol. 11, No. 6 (June 1968), pp. 415-416.
* ↑ «SuperPaint: An Early Frame Buffer Graphics System». Arxivat de l'original el 2004-06-12. [Consulta: 6 desembre 2016].
* ↑ «History of the New York Institute of Technology Graphics Lab».
* ↑ «Overdriving Your Monitor». tldp.org. [Consulta: 2 desembre 2016].

## Vegeu també

* Buffer múltiple
* Targeta gràfica
* Pla de bits

## Enllaços externs

* Interview with NYIT researcher discussing the 24-bit system Arxivat 2006-02-11 a Wayback Machine.
* Jim Kajiya – Designer of the first commercial framebuffer
* History of Sun Microsystems' Framebuffers
* DirectFB – An abstraction layer on top of the Linux Framebuffer device