Quake Wars, Megatexture, Linux. Alcune considerazioni post-beta

TTimo dice: “I thread… E’ una di quelle cose per cui la programmazione è assai differente fra Windows e Linux, e anche piccole variazioni di stile possono avere cattive conseguenze

Quake Wars: Enemy Territory è il primo gioco basato sul motore grafico id Tech 4 a usare Megatexture. Questa tecnologia richiede due thread per essere applicata alla scena 3D: il primo si occupa della lettura dei dati dal disco rigido; il secondo traduce i dati a un formato interpretabile dalla GPU.

Megatexture Tecnology è una tecnica che semplifica il procedimento (texture mapping) di applicazione delle texture alle mesh che compongono il terreno di un mondo virtuale 3D. L’idea di fondo è la seguente: invece di usare piccole texture da ripetere su tutta la superficie del terreno, Megatexture ne usa una sola ma estremamente larga (il Mega si riferisce proprio al fatto che ha dimensioni di 32000×32000 pixel); un algoritmo chiamato in questo caso fragment program, si occupa di ricreare la scena (rendering) limitando al minimo l’uso della memoria di sistema e della scheda video, che altrimenti non saprebbero contenerla date le enormi dimensioni.

Su un sistema a singolo core è importante avere i due thread di Megatexture in esecuzione a un livello di priorità più basso rispetto al thread principale del gioco (che si occupa per esempio di collision detection, antilag, ecc..), perché in caso contrario quest’ultimo si intopperebbe. Partendo da tale presupposto e considerando il fatto che Microsoft Windows usa i Pthread anziché NPTL, come è logico che sia, Timothy Besset doveva elaborare un modo per poter sincronizzare i suddetti compiti anche sotto Linux con NPTL. Ma le chiamate di sistema di Pthread non potevano essere usate nel presente caso specifico; durante lo sviluppo (porting) del client del gioco per Linux sono state adoperate dunque le funzioni getpriority/setpriority. Viene definita da TTimo una soluzione meno pulita rispetto allo schema proposto da Pthread, comunque esse fanno il lavoro richiesto.

NPTL è una libreria per gestire i Posix thread introdotta in Linux a partire dal kernel 2.6. Per scoprirne la presenza e la versione è sufficiente dare il seguente comando dal terminale
getconf GNU_LIBPTHREAD_VERSION

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

Leave a Reply