# DirectX 10

DirectX 10 is een verzameling van API's die het voor programmeurs eenvoudiger maakt computerspellen te programmeren op Windows Vista en Windows 7. DirectX 10 is verkrijgbaar sinds de definitieve release van Windows Vista. Windows XP had DirectX 9 aan boord. De ontwikkeling van DirectX 10 was grotendeels gericht op het verhelpen van problemen die programmeurs ondervonden bij de vorige versies van DirectX en om de snelheid, efficiëntie en prestaties te verhogen.
DirectX 10 werd opgevolgd door DirectX 11.
De grootste tegenhanger van DirectX is OpenGL.
DirectX 10 wordt gebruikt voor het aansturen van de graphics processing unit (GPU) van een videokaart.

## DirectX 10 APIs

* DirectX Graphics, bevat twee API's:
** DirectDraw: voor 2D
** Direct3D10 (D3D): voor 3D-graphics
* XInput: verwerking van gegevens afkomstig van toetsenbord, muis, joystick of andere spelcontrollers
* DirectPlay: voor communicatie over het netwerk bij spellen
* XACT: afspelen en opnemen van waveform- en 3D-geluiden en 3D-audio-effecten
* DirectMusic: voor het afspelen van soundtracks gemaakt in de DirectMusic Producer
* DirectSetup: voor de installatie van DirectX-componenten die nog niet in de API geïntegreerd zijn
* DirectX Media: bevat DirectAnimation, DirectShow, DXVAIDirectX Video Acceleration, Direct3D Retained Mode en DirectX Transform voor animatie, afspelen van multimedia en streaming-programma's, 3D, en de interactiviteit hiertussen
* DirectX Media Objects: ondersteuning voor streaming-objecten zoals encoders, decoders en effecten
DirectX 10 gebruikt alle DirectX-API's (DirectDraw, Direct3D, etc.) tezamen, in tegenstelling tot DirectX 9 waar ze onafhankelijk waren. Door deze combinatie van API's neemt de snelheid van DirectX 10 toe. DirectX is niet omgekeerd compatibel maar kan eerdere DirectX (9, 8, ...)-applicaties uitvoeren in een emulatielaag die eerder bekendstond als “Windows Graphics Foundation” (WGF). DirectX 10 voorziet ook ondersteuning voor shaders.

## Innovatie
### Snelheid

De grafische chip voert meer taken zelfstandig uit, waardoor de gewone processor minder wordt belast. Bovendien kan de grafische processor (GPU) met DirectX 10 ook voor andere taken ingeschakeld worden.
DirectX 10 gebruikt snellere en compleet nieuwe dynamically linked libraries (DLL's) om de prestaties te verhogen.
De graphics processing units (GPU's) die DirectX 10 ondersteunen hebben een geavanceerdere structuur en de onderdelen ervan sluiten beter op elkaar aan. Dit stelt ze in staat om volledige taken uit te voeren, die traditioneel enkel door de central processing unit (CPU) uitgevoerd werden.

### Direct3D 10

Direct3D 10: Microsoft werkt in 2007 aan een grote update van de Direct3D-API. De oorspronkelijke naam was Windows Graphics Foundation en later DirectX Next, maar de API krijgt nu de naam Direct3D 10 toegewezen en is een deel van Windows Vista.
Direct3D 10 vertrekt van het drivermodel van DirectX Graphics 9.0 met de toevoeging van een scheduler en een virtueel geheugensysteem. Direct3D 10 maakt een eind aan het gebruik van "capability bits" om aan te duiden welke features actief zijn binnen de huidige hardware. In plaats hiervan definieert Direct3D 10 een minimumstandaard van hardwaremogelijkheden die ondersteund moeten worden door een systeem om "Direct3D 10-compatibel" te zijn. Microsoft stelt dat Direct3D 10 tot acht maal sneller graphics zal kunnen weergeven dan DirectX Graphics 9.0. Dit is echter bij dezelfde hardware nooit het geval, vaak concluderen vergelijkingen juist het omgekeerde. Als toevoeging zal Direct3D 10 het Microsoft Shader Model 4.0 in zich opnemen.

### HLSL en Shared Model 4.0

High Level Shader Language (HLSL) en Shader Model 4.0: Sinds DirectX 8 in 2000 zijn er verschillende types programmeerbare shaders geweest. Deze lieten ontwikkelaars toe om het uiterlijk van de graphics naar hun wensen aan te passen door het overschrijven van de fixed function pipeline (FFP) welke altijd de pixels en vertices tekende. In DirectX 8 was dit enkel mogelijk door een bepaalde syntaxis. Deze syntaxis was gecompliceerd en werd nauwelijks bestudeerd door de DirectX-programmeurs. Bij het uitkomen van DirectX 9 werd deze syntaxis verfijnd en ontstond de High Level Shader Language (HLSL). Dit liet de ontwikkelaars toe om zelf shaders te schrijven door het gebruik van een gelijkaardige syntaxis gebaseerd op de programmeertaal C. Door deze syntaxis toegankelijker te maken voor ontwikkelaars werd de fixed function pipeline vaker overschreven om zelf shaders te ontwikkelen. Zo ontstond er een standaardmodel voor shaderontwikkeling, Shader Model 3.0. DirectX 10 hanteert een nieuwere versie gekend als Shader Model 4.0 waar er geen limieten staan op het aantal instructies dat gelijktijdig mag worden uitgevoerd. Dit komt doordat onder Windows Vista de graphics processing unit (GPU) gezien wordt als een gedeelde hulpbron om de central processing unit (CPU) te ontlasten. (Als voorbeeld hiervan kunnen oneindige loops verwerkt worden door de GPU zonder dat de CPU andere noodzakelijke processen moet opgeven waardoor de snelheid van de computer zou vertragen).
De High Level Shader Language (HLSL) is vernieuwd en bevat nu elke mathematische, logische, bitgerichte en gelijkheidsoperator die je kunt vinden in de programmeertaal C. Het voorziet ook ondersteuning voor de Shader Model 4.0's nieuwe geometry shaders. Deze zijn gelijkaardig aan de vertex-naar-pixel-shaders maar laten toe dat de graphics processing unit (GPU) primitieven kan aanmaken, verwijderen of aanpassen. De geometry shader bevindt zich tussen de vertex- en pixelshader. De vertexshader kon alleen werken met vertices (3D-punten). De geometry shader werkt met polygonen en aangrenzende polygonen. Dat maakt de hele grafische pijplijn wat complexer om in hardware te 'gieten', maar wel veel efficiënter. Door met complete polygonen of zelfs een heleboel polygonen te werken, kunnen enkele berekeningen van de central processing unit (CPU) naar de graphics processing unit (GPU) doorgeschoven worden. Botsingdetectie en het verwijderen van objecten die niet gezien worden, werden eerst door de CPU berekend en dan pas doorgestuurd. Nu kan de GPU dat eventueel zelf doen. De geometry shaders worden uitgevoerd voor de pixelshader en na de vertexshader.

### XNA

XNA: Microsoft werkt aan de ontwikkeling van dit framework dat het assisteren van de ontwikkeling van games gemakkelijker maakt door het integreren van DirectX, High Level Shader Language (HLSL) en andere hulpmiddelen in één pakket.
Er is een snellere high dynamic range-belichting (HDR), deze zorgt voor de lichteffecten bij grafische beelden. Behalve deze snellere HDR-belichting zijn ook de zachte schaduwen (soft shadows), displacement-mapping en dynamische pixelshaders sterk verbeterd. Een nadeel aan de soft shadows is dat het de frame rate vermindert. Dynamische pixelshading duidt op het feit dat een pixelshader beslissingen kan nemen met IF-THEN-ELSE vertakkingen. Displacement-mapping is vooral interessant om reliëf weer te geven in gezichten: dit laat toe om het spierweefsel van het gezicht en de huidrimpels te simuleren.

## Compatibiliteit

Microsoft stelde strikte vereisten voor GPU-fabrikanten om met DirectX 10 compatibel te zijn. Er zijn drie optionele features:
* het aantal samples voor multisample antialiasing
* het blenden van 32 bit floating-point render targets of color buffers
* het filteren van 32 bit texture formats
De intentie hiervan is om game-ontwikkelaars bewust te maken van alle features dat videokaarten hebben zodat men effectievere games zal kunnen maken door alle features van DirectX 10 te gebruiken. DirectX 10 is exclusief verkrijgbaar door Windows, wat betekent dat computers die een ander besturingssysteem hebben niet in staat zijn om applicaties uit te voeren die DirectX 10 vereisen. Een uitzondering hierop zullen de "next generation home consoles" zijn. Tevens hebben Wine-ontwikkelaars plannen om DirectX 10 te implementeren in oudere Windowsversies.

## DirectX 10-videokaarten

ATI en Nvidia, de grootste fabrikanten van videokaarten, hebben kaarten uitgebracht die met DirectX 10 werken.
Bijvoorbeeld de Nvidia 8 en 9 series hebben deze ondersteuning. ATI heeft een DirectX 10 compatibele GPU, de Radeon R600 chip die op de HD2900 (high-end model), de HD2600 (mid-range model) en de HD2400 (budget model) zit en reeds uit zijn.
De architectuur van deze nieuwe videokaarten verschilt significant van zijn DirectX 9-voorgangers. Deze nieuwe architectuur is dus afgestemd op de multimedia-API DirectX 10.
De G80 maakt gebruik van een unified architecture wat inhoudt dat er geen onderscheid meer gemaakt wordt tussen pixel- en vertexshaders. De GeForce 8800 GTX is uitgerust met 128 streamprocessors die met beide shadertypes overweg kunnen. Hierdoor hangen de prestaties van de GPU minder af van het type belasting dan voorheen. Tegenwoordig zullen alle nieuwe videokaarten die op de markt worden gebracht met DirectX 10 kunnen werken.