visita il sito del nostro sponsor





Tiny PTC


Giusto un piccolissimo articolo per farvi conoscere una piccolissima libreria grafica con un piccolissimo set di funzioni. Talmente piccolo che non e' facile immaginare un set di funzioni piu' ridotto, e quando ve le avro' elencate tutte non potrete che concordare ;)
Non bisogna pero' lasciarsi ingannare dalle sue dimensioni, poiche' dentro questo gioiellino di libreria, si cela una potenza non indifferente.
Il nome non poteva che essere "tiny" anch'esso, e infatti sto parlando di "TinyPTC - simple real time graphics library".

Chi ha l'esigenza di mandare della grafica sullo schermo, con aggiornamenti rapidi e senza troppe storie, sappia che TinyPTC fa proprio questo e lo fa egregiamente, e inoltre e' stata portata su varie piattaforme, tra cui Amiga! E per chi non ha mai acceso un pixel sullo schermo tramite righe di codice, provarci con TinyPTC rende la cosa meno traumatica che mai, lasciando la mente libera per concentrarsi su cosa far fare a quei pixel piuttosto che su come farli accendere.

Come recita il sito http://www.gaffer.org/tinyptc:

"TinyPTC e' una libreria grafica a basso livello per rendering software a 32 bit di colore. E' snella, veloce e semplice da usare: consta di sole *tre* funzioni! "open" crea la finestra video, "update" copia i pixel sullo schermo, e "close" chiude. Come puo' essere piu' facile?"

La libreria e' assolutamente open source, cosi' come lo era OpenPTC (il cui sviluppo e' stato interrotto), dalla cui costola TinyPTC e' stata creata, quale versione piu' semplice da usare, piu' snella, ridotta nelle dimensioni, con meno capacita' complessive ma piu' performante in cio' che sa fare; nel sito http://www.gaffer.org:8080/ptc/ptc.html ci si puo' fare un'idea dell'efficacia di questa libreria, anche leggendo in fondo alla pagina la lista di alcuni software che la usano, tuttavia si raccomanda vivamente l'utilizzo di TinyPTC, se le possibilita' da essa offerte non sono limitanti per lo scopo contingente. E ricordando sempre che comunque si tratta di software open source, per cui se per esempio il riconoscimento del solo tasto ESC (per chiudere la finestra video e la libreria) dovesse risultare insufficiente, nulla vieta al programmatore di modificare la porzione di codice della gestione degli eventi.

Ricapitolando, per creare una finestra video e mostrare in essa roba in movimento, basta chiamare ptc_open() specificando il titolo, la larghezza e l'altezza della finestra; quindi, la lavagna e' gia' bella pronta con un solo comando, e per accendere i pixel in essa prima li mettiamo in un vettore buffer (lo spazio di disegno effettivo e' bidimensionale ma TinyPTC prende in input un buffer monodimensionale) come componenti del colore desiderato, e poi li sbattiamo a video con ptc_update(), dove l'argomento e' il nostro vettore di buffer; per un'immagine statica abbiamo finito, per una bella animazione stacca mascella il principio e' lo stesso ma tra un ptc_update() e l'altro dobbiamo modificare il contenuto del buffer come piu' ci aggrada. Un esempio per gli scettici lo posso presentare grazie al piccolo "test.c" della libreria, eccolo qui (sono solo 37 linee in tutto compresi i commenti ma taglio via un po' di roba per evidenziare il lavoro che fa TinyPTC):


#include "tinyptc.h"
[...]
// ho escluso qui la definizione di costanti e variabili
[...]

int main()
{
if (!ptc_open("test",WIDTH,HEIGHT)) return 1;
while (1)
{
for (index=0; index<SIZE; index++)
{
[...]
// ho escluso qui il codice per avere un valore di "noise" pseudocasuale
[...]
pixel[index] = (noise<<16) | (noise<<8) | noise;
}
ptc_update(pixel);
}
}




E cosi', con pochissime banali linee di codice, dopo la compilazione invece che al solito hello world che ci fissa immobile al centro del monitor, assistiamo a un effetto noise da TV fuori sintonia assolutamente convincente!

L'autore di tale gioiellino e' Glenn Alexander Fiedler (alias "gaffer"), e co-autore (che si e' occupato in particolare della versione X11) Alessandro Gatti (alias "rigel"). Contattare quest'ultimo e' stato semplice quanto ottenere la sua disponibilita' per lasciarci qualche commento al riguardo:

[rigel - begin]
Posso parlare con cognizione di causa solamente riguardo alla versione X11 e a quella SDL (nata come proof-of-concept per conto di un amico che voleva usare SDL ma semplificarsi la vita...).

Lo scopo principale di TinyPTC era inizialmente di permettere al programmatore di mostrare immagini 2D a video con il minimo sforzo possibile e soprattutto di occupare pochissimo spazio su disco.
Il fatto che l'area di interesse della libreria (la grafica 2D) fosse molto ristretto e che presentasse un'API ridotta all'osso ha semplificato di molto il porting su diverse piattaforme/sistemi operativi: sono solo tre funzioni che isolano il programmatore in maniera molto efficace a scapito di una leggera perdita di flessibilita' - per esempio il fatto che non ci sia alcun supporto per piu' di un driver output a meno di modifiche alla libreria - modifiche comunque relativamente semplici da effettuare, ma che andrebbero a scapito del design della libreria stessa (ridotte dimensioni, API semplificata al massimo).

TinyPTC ha principalmente due vantaggi su librerie tipo SDL: il primo e' che sa fare solo una cosa e la sa fare bene :), quindi non si porta dietro nulla che non sia codice per gestire l'output grafico e il minimo indispensabile per gestire gli eventi da tastiera, quanto basta per riconoscere il tasto ESC e quindi uscire. Stando a dei benchmark di alcuni utenti pare che TinyPTC sia circa il 10-15% piu' veloce di SDL ma, come per tutti i benchmark, alla fine potrebbe essere valido solo per una specifica condizione su una specifica combinazione di software, drivers e hardware. Il secondo vantaggio e' la dimensione ridotta sia su disco che di ram occupata, che nel caso di devices embedded con Linux e affini aiuta non poco a risparmiare memoria (sebbene al momento non ci sia un target per framebuffer Linux, se ci saranno richieste specifiche in tal senso non sara' improbabile che nasca qualcosa...).
La versione X11 e', purtroppo, l'unica che abbia il supporto per essere usata con linguaggi di scripting vari (utilizzando SWIG per generare i wrapper). Non conosco ARexx in maniera approfondita, ma per la versione Amiga credo che si possa scrivere il codice di interfacciamento in tal senso.
Esistono ovviamente degli svantaggi nell'usare TinyPTC piuttosto che SDL e affini: come al solito bisogna scegliersi gli strumenti giusti per lo scopo, e quindi tenere conto, nel caso di TinyPTC, principalmente dell'assenza di funzioni accessorie o di helper per il programmatore, dato che la libreria di suo non fa quasi nulla ;)
[rigel - end]

Bene, e adesso basta leggere e andate a "toccare con mano", nulla di piu' semplice visto che sul sito sono disponibili spettacolari applet create con TinyPTC per Java. E non giocate troppo con "string physics simulation", e' un consiglio, io ci son passato! ^__^

Antonio Orlando




visita il sito del nostro sponsor