..._var
..._flt
Endet der Name einer Fließkomma-Shadervariablen, eines Arrays oder Vektors auf die Buchstabenfolge "_var" oder "_flt", wird der/diejenige automatisch von einer entsprechenden globalen Variablen bzw. Array oder Strukt im Voraus gesetzt. Der/diejenige wird in lite-C mit dem Namen, dem die Zeichenfolge "_var" bzw."_flt" vorangestellt ist, definiert. Derart kann ein Shader jedwede globale Variable aus dem Skript verwenden. A7.75 LC Typ:
var
oder float (lite-C)
float, floatn, floatnxn (Shader-Code)
Bemerkungen:
- Die Variable wird einmal pro Frame vom Skript auf den Shader upgedatet. In Renderevents wird sie nicht upgedatet, was, wenn die Variable zur Renderzeit geändert wird, zu falschen Ergebnissen führt. Für Variablen oder Matrices, die sich zur Renderzeit ändern, verwenden Sie Material-Skills oder eine Material-Matrix.
- Eine -var-Shadervariable konvertiert beim Updaten aus dem Skript automatisch von var zu float und muss daher nicht mit floatv() erstellt werden. Eine _flt-Shadervariable wird nicht umgewandelt. Bei globalen VECTOR-Structs werden die y- und z-Komponenten zum Umwandeln automatisch durch float3-DirectX-Koordinaten ausgetauscht. Bei globalen COLOR-Structs werden die Rot- und Blaukomponenten zum Umwandeln automatisch durch float3 RGB-Farben ausgetauscht.
- Die Größe einer Shadervariablen muss der Größe der Variablen, des Arrays oder Structs im Skript entsprechen.
- Ein Shader kann keine Variablen ins Skript zurückschreiben. Die einzige Möglichkeit, Ergebnisse aus einem Shader auszuwerten, ist es, den Inhalt von Rendertarget-Bitmaps zu lesen.
Beispiel (lite-C):
var PSSM_Splits[4];
...
for (i=0; i<4; i++) {
PSSM_Splits[i] = (i+1)*split_distance;
...
MATERIAL* mtlPSSM =
{
effect = "
float PSSM_Splits_var[4]; // access the global PSSM_Splits array
...
for (int i=0; i<4; i++) {
if (fDist < PSSM_Splits_var[i]) { ... //compare shadowmap depth
...
";
}
Siehe auch:
MATERIAL,
shaders, shader
parameters, ..._bmap
► latest
version online