Videos der PDC 2009 online

26.11.2009 17:57

Für alle die der diesjährigen PDC nicht persönlich beiwohnen konnten, stehen jetzt Videos der Sessions online zur Verfügung. Zwei Sessions, Advanced Graphics Functionality Using DirectX und Modern 3D Graphics Using Windows 7 and Direct3D 11 Hardware, von Michael Oneppo geben Einblick in die neuen Möglichkeiten von Windows 7 und DirectX 11.

Videos der PDC 2009 Sessions

UnrealEngine 3 und CryENGINE 3 kostenlos

19.11.2009 11:57

Kürzlich hat Epic Games seine UnrealEngine 3 für nicht kommerzielle Projekte zum kostenlosen Download bereitgestellt. Nun zieht auch das Frankfurter Studio Crytek nach und veröffentlichte seine CryENGINE 3. Crytek möchte seine Engine u.a. Universitäten anbieten. Interessenten müssen sich auf der Website der CryENGINE bewerben.

Unreal Developer Kit Download

CryENGINE 3 Bewerbung

Neues Buch zum Thema XNA Framework

09.11.2009 09:23

Seit langer Zeit ist mein Buch "Spieleentwicklung mit dem Microsoft XNA Framework" angekündigt. Oft wurde es aufgrund chronischen Zeitmangels verschoben. Nun kann ich endlich mitteilen, dass das Buch in den Druck gegangen ist. Das heißt, das Buch wird Ende November bei entwickler.press erhältlich sein. Dem Buch liegt keine CD-Rom bei. Stattdessen werden die Beispielprojekte im Laufe dieses Monats online zur Verfügung stehen.


Selbstverständlich möchte man nicht die Katze im Sack kaufen, weshalb Sie unter folgendem Link das Inhaltsverzeichnis des Buchs einsehen können.

Entwicklung mit dem Microsoft XNA Framework - Inhaltsverzeichnis

Wie immer begrüße ich Hinweise auf Fehler und sonstige Kritik. Letzteres wird selbstverständlich in einer evtl. 2. Auflage, sofern möglich, berücksichtigt.

Feature Levels

08.11.2009 13:43

Die Entwicklung von Computerspielen für Personal Computer gestaltet sich schwieriger als die Entwicklung für Konsolen, denn herrkömmliche Computer variieren sehr stark in deren Hard- und Softwareausstattung. Während bei Konsolen die Fähigkeiten der Grafikkarte bekannt sind, muss beim PC immer abgefragt werden, welche Features die Grafikkarte unterstützt. Infolgedessen bedarf es diverser Codepfade, um Effekte abgeschwächt auf älterer Hardware auszuführen oder ganz zu deaktivieren.
Unter DirectX 9 fragen Sie die Fähigkeiten der Grafikkarte über die CAPS (Capabilities) ab. Das DirectX SDK enthält eine vollständige Auflistung aller CAPS. Ausgedruckt bringt es die Liste auf mehrere A4-Blätter. Um jener Komplexität Herr zu werden, führte Microsoft mit DirectX 10.1 die sog. Feature Levels ein. Unter DirectX 11 existieren sechs Feature Levels, die die CAPS gruppieren.
  • Feature Level 11.0
  • Feature Level 10.1
  • Feature Level 10.0
  • Feature Level 9.3
  • Feature Level 9.2
  • Feature Level 9.1

In obiger Auflistung, von oben nach unten gesehen, repräsentiert jedes Feature Level ein Superset der darunterliegenden Ebene. Jetzt stellt sich die Frage, welchen Sinn die Feature Levels haben? Hauptsächlich sollen die Feature Levels die Entwicklung vereinfachen, indem die vielen Permutationen der CAPS in den Griff zu kriegen. Statt unzähliger CAPS gibt es nun eben maximal sechs Feature Levels die die Fähigkeiten der Grafikkarte beschreiben. Darüberhinaus vereinfachen die Feature Levels die Verwendung des API, denn Sie können ebenso ein Direct3D 11 Device auf Basis von Direct3D 9 Hardware erzeugen (gleiches gilt für ein Direct3D 10.1 Device auf Basis von Direct3D Hardware).
Das Feature Level 9.1 umfasst beispielsweise das Shader Model 2.0. Feature Level 9.2 beinhaltet alle Funktionen aus dem Feature Level 9.1. Darüberhinaus unterstützt das Feature Level 9.2 u.a. vier simultane Render Targets. Ab Feature Level 9.3 steht zum Beispiel das Shader Model 3.0 zur Verfügung.
Während bei Direct3D 10.1 beispielsweise für jedes Feature Level versucht werden muss ein Device zu erzeugen, genügt bei Direct3D 11 die Erzeugung des Device. Auf welchem Feature Level das Device basiert, gibt die D3D11CreateDevice()-Funktion zurück.
Folgendes Beispiel demonstriert die Vorgehensweise beim Erzeugen eines Direct3D 10.1 Devices.
const D3D10_FEATURE_LEVEL1 pFeatureLevels[] =
{
  D3D10_FEATURE_LEVEL_10_1,
  D3D10_FEATURE_LEVEL_10_0,
  D3D10_FEATURE_LEVEL_9_3,
  D3D10_FEATURE_LEVEL_9_2,
  D3D10_FEATURE_LEVEL_9_1,
};

const D3D10_DRIVER_TYPE pDriverTypes[] =
{
  D3D10_DRIVER_TYPE_HARDWARE,
  D3D10_DRIVER_TYPE_WARP,
  D3D10_DRIVER_TYPE_REFERENCE,
};

const UINT iDriverCount = sizeof(pDriverTypes) /
  sizeof(pDriverTypes[0]);
const UINT iFeatureCount = sizeof(pFeatureLevels) /
  sizeof(pFeatureLevels[0]);

for(UINT iDriverType = 0; iDriverType < iDriverCount;
  iDriverType++)
  for(UINT iFeatureLevel = 0; iFeatureLevel < iFeatureCount;
    iFeatureLevel++)
    {
      hResult = D3D10CreateDevice1(pAdapter,
        pDriverTypes[iDriverType], NULL,
        D3D10_CREATE_DEVICE_BGRA_SUPPORT,
        pFeatureLevels[iFeatureLevel],
        D3D10_1_SDK_VERSION,
        &_pD3D10Device);

      if(SUCCEEDED(hResult))
        return S_OK;
    }
Unter Direct3D 11 wurde der Vorgang vereinfacht. Hier bedarf es lediglich der Iteration aller Device Types, bis schließlich ein Device erzeugt werden konnte.
const D3D_FEATURE_LEVEL pFeatureLevels[] =
{
  D3D_FEATURE_LEVEL_11_0,
  D3D_FEATURE_LEVEL_10_1,
  D3D_FEATURE_LEVEL_10_0,
  D3D_FEATURE_LEVEL_9_3,
  D3D_FEATURE_LEVEL_9_2,
  D3D_FEATURE_LEVEL_9_1,
};

const D3D_DRIVER_TYPE pDriverTypes[] =
{
  D3D_DRIVER_TYPE_HARDWARE,
  D3D_DRIVER_TYPE_WARP,
  D3D_DRIVER_TYPE_REFERENCE,
};

const UINT iDriverCount = sizeof(pDriverTypes) /
  sizeof(pDriverTypes[0]);
const UINT iFeatureCount = sizeof(pFeatureLevels) /
  sizeof(pFeatureLevels[0]);

for(UINT iDriverType = 0; iDriverType < iDriverCount;
  iDriverType++)
{
  hResult = D3D11CreateDeviceAndSwapChain(NULL,
    pDriverTypes[iDriverType], NULL,
    D3D11_CREATE_DEVICE_DEBUG |
    D3D11_CREATE_DEVICE_BGRA_SUPPORT,
    pFeatureLevels,
    iFeatureCount,
    D3D11_SDK_VERSION,
    &_GraphicsDeviceManager.SwapChainDesc,
    &_GraphicsDeviceManager.SwapChain,
    &_GraphicsDeviceManager.GraphicsDevice,
    &_GraphicsDeviceManager.FeatureLevel,
    &_GraphicsDeviceManager.DeviceContext);
}
 
© 2009 Jens Konerow