Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Shader geometrie s proudem je deklarován s konkrétní syntaxí. Toto téma popisuje syntaxi. V modulu runtime efektu bude tato syntaxe převedena na volání ID3D11Device::CreateGeometryShaderWithStreamOutput.
Syntaxe konstruktoru
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
| Jméno | Popis |
|---|---|
| StreamingShaderVar | Volitelný. Řetězec ASCI, který jednoznačně identifikuje název proměnné shaderu geometrie s datovým proudem. To je volitelné, protože KonstruktGSWithSO lze umístit přímo do Metody SetGeometryShader nebo BindInterfaces volání. |
| shaderVar | Proměnná shaderu geometrie nebo shaderu vrcholů. |
| outputDecl0 | Řetězec definující výstupy shaderu ve streamu 0 se streamují. Syntaxi najdete níže. |
Toto je syntaxe definovaná v fx_4_0 souborech. Všimněte si, že v gs_4_0 a vs_x shadery existuje pouze jeden datový proud. Výsledný shader vypíše jeden datový proud do jednotky stream outu i rasterizační jednotky.
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2",
"OutputDecl3", RasterizedStream )
| Jméno | Popis |
|---|---|
| StreamingShaderVar | Volitelný. Řetězec ASCI, který jednoznačně identifikuje název proměnné shaderu geometrie s datovým proudem. To je volitelné, protože KonstruktGSWithSO lze umístit přímo do Metody SetGeometryShader nebo BindInterfaces volání. |
| shaderVar | Proměnná shaderu geometrie nebo shaderu vrcholů. |
| outputDecl0 | Řetězec definující výstupy shaderu ve streamu 0 se streamují. Syntaxi najdete níže. |
| outputDecl1 | Řetězec definující výstupy shaderu ve streamu 1 se streamují. Syntaxi najdete níže. |
| outputDecl2 | Řetězec definující výstupy shaderu ve streamu 2 se streamují. Syntaxi najdete níže. |
| OutputDecl3 | Řetězec definující výstupy shaderu ve streamu 3 se streamují. Syntaxi najdete níže. |
| rasterizedStream | Celé číslo určující, který datový proud se odešle do rasterizátoru. |
Všimněte si, že gs_5_0 shadery můžou definovat až čtyři datové proudy. Výsledný shader vypíše jeden datový proud do jednotky stream out pro každou jinou nežNULL výstupní deklaraci a jeden stream rastrovací jednotku.
Syntaxe deklarace streamu
" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
| Jméno | Popis |
|---|---|
| vyrovnávací paměti | Volitelný. Celé číslo, 0 <= vyrovnávací paměť < 4, určující, na který datový proud vyrovnávací paměti hodnota přejde. |
| sémantické | Řetězec spolu se sémanticIndex určující, která hodnota má být výstup. |
| SémanticIndex | Volitelný. Index přidružený k sémantickému. |
| masky | Volitelný. Maska komponenty označující, které součásti hodnoty se mají výstupem. |
Existuje jedna speciální sémantická, označená jako "$SKIP", která označuje prázdnou sémantickou hodnotu a ponechá odpovídající paměť v vyrovnávací paměti mimo vyrovnávací paměť nedotčenou. Sémantický $SKIP nemůže mít sémanticIndex, ale může mít masku.
Celá deklarace datového proudu může být null.
Příklad
struct GSOutput
{
int4 Pos : Position;
int4 Color : Color;
int4 Texcoord : Texcoord;
};
[maxvertexcount(1)]
void gsBase (inout PointStream<GSOutput> OutputStream, inout PointStream<GSOutput> OutputStream1)
{
GSOutput output;
output.Pos = int4(1,2,3,4);
output.Color = int4(5,6,7,8);
output.Texcoord = int4(9,10,11,12);
OutputStream.Append(output);
output.Pos = int4(1,2,3,4);
output.Color = int4(5,6,7,8);
output.Texcoord = int4(9,10,11,12);
OutputStream1.Append(output);
};
GeometryShader pGSComp = CompileShader(gs_5_0, gsBase());
GeometryShader pGSwSO = ConstructGSWithSO(pGSComp, "0:Position.xy; 1:Position.zw; 2:Color.xy",
"3:Texcoord.xyzw; 3:$SKIP.x;", NULL, NULL, 1);
// The following two passes perform the same operation
technique11 SOPoints
{
pass
{
SetGeometryShader(ConstructGSWithSO(pGSComp, "0:Position.xy; 1:Position.zw; 2:Color.xy",
"3:Texcoord.xyzw; 3:$SKIP.x;", NULL, NULL, 1));
}
pass
{
SetGeometryShader(pGSwSO);
}
}
Související témata