2017-02-01 3 views
1

Ich arbeite derzeit mit dem Quellcode aus dem GPU Gems 2 Buch, und ich versuche, die Improved Perlin Noise implementation (Chapter 26) zu konvertieren, um mit DirectX 11 zu arbeiten. Obwohl die Optimierungen relativ schmerzlos waren, waren sie eine leichte Belästigung aufgrund ihrer Verwendung von Texturen zur Unterstützung von Lookups. Der ursprüngliche Code verwendet eine scheinbar nicht mehr existierende Methode, um Texturen zu deklarieren, die ich nicht in modernes DirectX konvertieren kann.Gibt es DirectX 11 (HLSL 5.0), das der Syntax der String-Funktion von DirectX 9 entspricht?

Ein Beispiel für die Art der Textur Erklärung Mir Bedeutung ist: (von der inoise.fxh Datei)

texture permTexture 
< 
    string texturetype = "2D"; 
    string format = "l8"; 
    string function = "GeneratePermTexture"; 
    int width = 256, height = 1; 
>; 

Der Textur-Typ, Format, Breite und Höhe Ich verstehe, wie außerhalb konfigurieren der Shader, der string function = "GeneratePermTexture" Teil hat mich jedoch geworfen.

Die Funktion es ist bezogen auf: (in der gleichen Datei)

float4 GeneratePermTexture(float p : POSITION) : COLOR 
{ 
    return permutation[p*256]/255.0; 
} 

Es gibt einen Kommentar über diesem Abschnitt der Datei (die mehrere dieser Funktionen für ihre jeweiligen Texturen enthält) sagen // Functions to generate textures using CPU runtime

Gibt es einen einfachen Weg, dies mit Dx11 zu tun? Mein derzeitiger Untersuchungszug schlägt vor, dass ich den Teil der CreateTexture-Funktionen verwenden sollte.

Antwort

2

Die Dinge zwischen den < und > in der Textur-Deklaration heißen annotations. Obwohl das Effektsystem in D3DX9 mehrere "standard annotations" hat, scheint 'Funktion' nicht einer davon zu sein. Die Standard-Annotationen wurden hauptsächlich von externen Tools verwendet, um die Erstellung von Shadern zu unterstützen, zum Beispiel in RenderMonkey.

Diese Werte bieten im Kontext von DirectX keine tatsächliche zusätzliche Funktionalität, dienen jedoch wahrscheinlich als Metadaten, die der C++ - Code zum Generieren der Texturen verwenden würde. Die Annotationswerte können (in C++) mit den Funktionen GetAnnotation oder GetAnnotationByName abgefragt werden. Wenn Sie diese auf DirectX 11 portieren, können Sie diese Werte einfach in Ihrem C++ - Code fest codieren oder aus einer Datendatei laden.

+0

Die Standard-Annotationen sind auch in das Legacy-Effects-System eingebunden, so dass sie im Kontext der "geraden HLSL" -Codierung, die die empfohlene moderne Lösung ist, nicht wirklich verwendet werden. Das heißt, Sie können [Effekte für Direct3D 11] (https://github.com/Microsoft/FX11) verwenden, wenn Sie möchten. Unter [this thread] (https://fx11.codeplex.com/discussions/450240) finden Sie Details zum Status von "Effects" und [this thread] (https://fx11.codeplex.com/discussions/551307). für FX vs HLSL. –

+0

Danke für die Klarstellung, ich schaue mir jetzt die Bilder vorgenerieren an. –