Quake Wars, Megatexture, Linux. Alcune considerazioni post-beta
Friday, October 5th, 2007TTimo 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.
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.
getconf GNU_LIBPTHREAD_VERSION

