computer,hardware,software,gaming,notebook,portatile,home theater,htpc,windows,overclock
    Ricerca avanzata
 
pecora nera
 

 categorie categorie del sito
 Schede madri separatore
 Processori separatore
 Bios separatore
 Schede video e monitor separatore
 Chipset separatore
 Memorie RAM separatore
 Storage separatore
 Dissipazione separatore
 Accessori, case e sistemi separatore
 HTPC e alta definizione separatore
 Notebook, netbook e phone separatore
 Sicurezza e reti separatore
 Software e videogame separatore
 Web e gossip separatore
 Overclock e modding separatore
 HowTo separatore
 Elettronica e informatica separatore
 
 Guida al bios separatore
 FAQs separatore
 Windows Vista FAQ & Tips separatore
||
 servizi servizi del sito
 Iscrizione ai servizi separatore
 Iscrizione a Daily Dinox's separatore
 Informazioni newsletter separatore
 Pubblicità su Dinox PC separatore
Tool ricerca per Firefox 2 Tool ricerca per Firefox 2 separatore
Tool ricerca per IE7 Tool ricerca per IE7 separatore
Preferiti Dinox PC nei preferiti separatore
Imposta come homepage Dinox PC come homepage separatore
Links utili
 Aziende ITC separatore
 Partners di Dinox PC separatore
 Mr.Webmaster separatore
 Neo Hardware separatore
 DevSpy.com separatore
 MPEGX.com separatore

www.aruba.it
www.
Analisi DirectX 10
Prodotta da Dino Fratelli il 08.11.2006 Schede video Contatta autore Discutine

Introduzione

Vai a 

L'arrivo di Windows Vista comporterà anche l'introduzione delle nuove API DirectX 10 sviluppate da Microsoft. Per la prima volta nella storia delle DirectX, assistiamo ad una riprogettazione da zero, tanto che fino a qualche tempo fa, il big di Redmond aveva paventato la possibilità di cambiare anche la loro denominazione in WGF 1.0 (Windows Graphics Foundation).

Questo sta a significare che le novità che Microsoft si appresta ad introdurre con la versione 10 delle API sono davvero tante, mirate per la maggior parte ad ottenere prestazioni superiori. Rispetto alle DirectX 9, in particolare, le DirectX 10 supportano funzioni di geometry shaders, stream output, geometry instancing migliorate e riduzione dell'overhead sulla CPU durante i trasferimenti da CPU a GPU.

Prima di procedere oltre, però, è bene fare una breve introduzione relativa al ruolo ricoperto dalle DirectX. Precedentemente all'introduzione delle API per la programmazione della grafica, le applicazioni 3D comandavano direttamente l'hardware attraverso un linguaggio di programmazione molto a basso livello. Questo modo di agire permetteva di ottenere prestazioni molto elevate, ma le applicazioni dovevano gestire comandi diversi per hardware diversi. I risultati erano quelli di uno sviluppo molto difficoltoso, pieno di errori e con prodotti non funzionanti a priori su qualunque hardware. Con la crescita dell'offerta di dispositivi hardware dedicati alla grafica 3D, un approccio di questo genere diventava sempre più impraticabile. Serviva, a questo punto, un layer che potesse fare da traduttore fra le applicazioni 3D e l'hardware sottostante. A tal proposito furono, perciò, progettate le API DirectX ed OpenGL.

Con questa novità, il modello di programmazione cambia radicalmente: le applicazioni possono implementare solo il codice necessario alla propria logica mentre le API si preoccupano di tradurre tale codice in istruzioni capibili dall'hardware sottostante. Tale principio, alla base di qualunque programma software scritto secondo il paradigma Object Oriented, porta lo sviluppatore a concentrarsi solo sulla logica di business del suo prodotto, ignorando completamente le problematiche legate all'hardware sul quale esso dovrà girare. Per contro, però, l'introduzione di un nuovo layer nella catena di esecuzione del software comporta un certo decadimento delle prestazioni. Ogni volta che le DirectX ricevono un comando dall'applicazione, questo deve essere processato prima di sapere come indirizzarlo verso il dispositivo hardware.

Fino alla versione 9 delle API, il processo di "traduzione" del comando veniva eseguito sulla CPU: dunque tutti i comandi 3D causavano un overhead sulla CPU (un sovraccarico) che si traduce in due problemi per la catena di produzione delle scene  3D, ovvero un limite al numero di oggetti che possono essere renderizzati ed un limite al numero di effetti che possono essere applicati alla scena.

In merito al primo problema, poiché ogni chiamata dell'applicazione alle API genera un overhead fisso, solo un numero finito di chiamate può essere indirizzato alle API prima che il sistema diventi "CPU limited" e dunque solo un numero limitato di oggetti può essere disegnato. Gli sviluppatori si sono ingegnati in vari modi per risolvere questo problema ed una delle tecniche più efficaci consiste nel fare un batch degli oggetti da disegnare, ovvero raggruppare un certo numero di oggetti e fare una sola chiamata. Purtroppo, però, la tecnica funziona solo con oggetti uguali che non differiscono per le proprietà del materiale.

Riguardo la seconda problematica, essa risulta in una limitata ricchezza di particolari visivi dell'applicazione. Le API, infatti, non vengono chiamate solo per disegnare oggetti ma anche per cambiare texture, shader, formato dei vertici e modalità di blending: ognuno di questi cambiamenti causa un sovraccarico sulla CPU non indifferente ma allo stesso tempo è cruciale per offrire una visione degli ambienti di gioco unica. Addirittura i cambiamenti di stato potrebbero accadere più spesso delle chiamate per disegnare gli oggetti, in quanto su un singolo oggetto della scena 3D potrebbero essere applicati effetti multipli. Finora le uniche soluzioni a questo problema sono state due: quella ovvia di non utilizzare troppi cambiamenti di stato, applicando una scarsa varietà di texture ed effetti alle scene del gioco ed una che prevede di incollare assieme molte piccole texture in una singola texture (texture atlas) di dimensioni maggiori. Anche quest'ultimo approccio ha però i suoi limiti che si concretizzano in una texture di dimensioni massime di 4048 x 4048 pixel prevista nelle DirectX 9.


Home page
Dinox PC Hardware

Avanti
Ridurre il sovraccarico sulla CPU