Freigeben über


IDirect3DDevice9::ValidateDevice-Methode (d3d9helper.h)

Meldet die Fähigkeit des Geräts, die aktuellen Texturmischungsvorgänge und -argumente in einem einzigen Durchlauf zu rendern.

Syntax

HRESULT ValidateDevice(
  [out, retval] DWORD *pNumPasses
);

Parameter

[out, retval] pNumPasses

Typ: DWORD*

Zeiger auf einen DWORD-Wert, der mit der Anzahl der Renderingdurchläufe gefüllt werden soll, die erforderlich sind, um den gewünschten Effekt durch Multipassrendering abzuschließen.

Rückgabewert

Typ: HRESULT

Wenn die Methode erfolgreich ist, wird der Rückgabewert D3D_OK. Wenn die Methode fehlschlägt, kann der Rückgabewert einer der folgenden sein: D3DERR_CONFLICTINGRENDERSTATE, D3DERR_CONFLICTINGTEXTUREFILTER, D3DERR_DEVICELOST, D3DERR_DRIVERINTERNALERROR, D3DERR_TOOMANYOPERATIONS, D3DERR_UNSUPPORTEDALPHAARG, D3DERR_UNSUPPORTEDALPHAOPERATION, D3DERR_UNSUPPORTEDCOLORARG, D3DERR_UNSUPPORTEDCOLOROPERATION, D3DERR_UNSUPPORTEDFACTORVALUE, D3DERR_UNSUPPORTEDTEXTUREFILTER, D3DERR_WRONGTEXTUREFORMAT.

Hinweise

Die IDirect3DDevice9::ValidateDevice-Methode sollte nur verwendet werden, um Szenarien zu überprüfen, wenn andere Funktionen unzureichend sind. In einem mehrstufigen Texturierungsszenario können Sie beispielsweise die Elemente MaxTextureBlendStages und MaxSimultaneousTextures einer D3DCAPS9 Struktur abfragen, um festzustellen, ob mehrstufige Texturierung auf dem Gerät möglich ist.

Die aktuelle Hardware implementiert nicht unbedingt alle möglichen Kombinationen von Vorgängen und Argumenten. Sie können bestimmen, ob ein bestimmter Füllvorgang mit angegebenen Argumenten ausgeführt werden kann, indem Sie den gewünschten Mischvorgang festlegen und dann die IDirect3DDevice9::ValidateDevice-Methode aufrufen.

Die IDirect3DDevice9::ValidateDevice-Methode verwendet die aktuellen Renderzustände, Texturen und Texturstufenzustände, um zum Zeitpunkt des Aufrufs eine Überprüfung durchzuführen. Änderungen an diesen Faktoren nach dem Aufruf ungültig machen das vorherige Ergebnis ungültig, und die Methode muss erneut aufgerufen werden, bevor eine Szene gerendert wird.

Um eine optimale Leistung zu erzielen, rufen Sie IDirect3DDevice9::ValidateDevice zur Initialisierungszeit auf. verwenden Sie sie nicht innerhalb einer Renderschleife.

Die Verwendung diffuser iterierter Werte, entweder als Argument oder als Vorgang (D3DTA_DIFFUSED3DTOP_BLENDDIFFUSEALPHA), wird auf der aktuellen Hardware selten unterstützt. Die meisten Hardwaregeräte können iterierte Farbdaten erst in der letzten Texturvorgangsphase einführen.

Versuchen Sie, die Textur (D3DTA_TEXTURE) für jede Phase als erstes Argument und nicht als das zweite Argument anzugeben.

Viele Karten unterstützen die Verwendung von diffusen oder skalaren Werten in beliebigen Texturphasen nicht. Häufig sind diese nur in der ersten oder letzten Textur-Blending-Phase verfügbar.

Viele Karten verfügen nicht über eine Mischeinheit, die der ersten Textur zugeordnet ist, die mehr kann, als Alpha in Farbkanäle zu replizieren oder die Eingabe umzukehren. Daher muss Ihre Anwendung ggf. nur die zweite Texturstufe verwenden. Auf dieser Hardware wird davon ausgegangen, dass sich die erste Einheit im Standardzustand befindet, wobei das erste Farbargument mit dem D3DTOP_SELECTARG1-Vorgang auf D3DTA_TEXTURE festgelegt ist.

Vorgänge für die Ausgabe alpha, die komplexer sind oder sich wesentlich von den Farbvorgängen unterscheiden, werden weniger wahrscheinlich unterstützt.

Einige Hardware unterstützt keine gleichzeitige Verwendung von D3DTA_TFACTOR und D3DTA_DIFFUSE.

Viele Karten unterstützen die gleichzeitige Verwendung mehrerer Texturen und die mipmappenbasierte trilineare Filterung nicht. Wenn die trilineare Filterung für eine Textur angefordert wurde, die an Multitexture-Mischvorgängen beteiligt ist, und die Überprüfung fehlschlägt, deaktivieren Sie die trilineare Filterung und überprüfung. In diesem Fall sollten Sie stattdessen ein Mehrpassrendering durchführen.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile d3d9helper.h (einschließlich D3D9.h)
Bibliothek D3D9.lib

Weitere Informationen

IDirect3DDevice9

IDirect3DDevice9::GetTextureStageState

IDirect3DDevice9::SetTextureStageState