Tipo de struct

Use a sintaxe a seguir para declarar uma estrutura usando HLSL.

nome do struct { [ InterpolationModifier ] Type [ R x C ] MemberName; ... };

Parâmetros

Nomes

Uma cadeia de caracteres ASCII que identifica exclusivamente o nome da estrutura.

[InterpolationModifier]

Modificador opcional que especifica um tipo de interpolação. Consulte Comentários para obter detalhes.

Tipo [ de R x C]

O tipo de membro com um tamanho de matriz de coluna (C) de linha opcional (R) x. Uma estrutura contém pelo menos um elemento; Se ele contiver mais de um elemento, os elementos serão todos do mesmo tipo. O número de linhas e colunas são inteiros sem sinal entre 1 e 4, inclusive.

MemberName

Uma cadeia de caracteres ASCII que identifica exclusivamente o nome do membro.

Comentários

Um modificador de interpolação pode ser especificado em qualquer membro da estrutura ou em um argumento para uma função de sombreador de pixel. Se um modificador aparecer em ambos os locais, o modificador externo (o modificador de argumento do sombreador de pixel) ultrapassará o modificador interno (o modificador de estrutura).

Ao compilar um sombreador ou um efeito, o compilador do sombreador empacota os membros da estrutura de acordo com as regras de empacotamento HLSL.

Modificadores de interpolação introduzidos no modelo de sombreador 4

As saídas de sombreador de vértice que são usadas para entradas de sombreador de pixel são interpoladas linearmente para obter valores por pixel durante a rasterização. Para definir o método de interpolação, use qualquer um dos valores a seguir, que têm suporte no modelo de sombreador 4 ou posterior. O modificador é ignorado em qualquer saída de sombreador de vértice que não seja usada como entrada de sombreador de pixel.

Modificador de interpolação Description
linear Interpolação entre entradas de sombreador; linear é o valor padrão se nenhum modificador de interpolação for especificado.
centróide Interpolação entre exemplos que estão em algum lugar dentro da área coberta do pixel (isso pode exigir extrapolação de pontos de extremidade de um centro de pixel). A amostragem de centróide pode melhorar a suavização se um pixel for parcialmente coberto (mesmo que o pixel Center não esteja coberto). O modificador de centróide deve ser combinado com o modificador linear ou noperspective .
nointerpolação Não interpolar.
noperspective Não execute a correção de perspectiva durante a interpolação. O modificador noperspective pode ser combinado com o modificador de centróide .
Nova Disponível no modelo do sombreador 4,1 e posterior Interpolação no local de exemplo em vez de no pixel Center. Isso faz com que o sombreador de pixel seja executado por amostra em vez de por pixel. Outra maneira de fazer com que a execução por amostra seja ter uma entrada com _ SAMPLEINDEX de VA semântica, que indica o exemplo atual. Somente as entradas com amostra especificada (ou entrada de SAMPLEINDEX de VA _ ) diferem entre invocações de sombreador no pixel, enquanto outras entradas que não especificam modificadores (por exemplo, se você misturar modificadores em diferentes entradas) ainda são interpoladas no pixel Center. A invocação do sombreador de pixel e o teste de profundidade/estêncil ocorrem para cada amostra coberta no pixel. Isso às vezes é conhecido como Superamostragem. Por outro lado, na ausência de invocação de frequência de exemplo, conhecida como multiamostral, o sombreador de pixel é invocado uma vez por pixel, independentemente de quantas amostras são cobertas, enquanto o teste de profundidade/estêncil ocorre na frequência de amostragem. Ambos os modos fornecem anti-aliasing de borda equivalente. No entanto, a Superamostragem fornece melhor qualidade de sombreamento invocando o sombreador de pixel com mais frequência.
1. Ao usar um tipo int/uint, a única opção válida é **nointerpolation**.

Os modificadores de interpolação podem ser aplicados aos membros da estrutura ou aos argumentos da função, ou ambos.

Exemplos

Aqui estão algumas declarações de estrutura de exemplo.

struct struct1
{
  int    a;
}

Essa declaração inclui uma matriz.

struct struct2
{
  int    a;
  float  b;
  int4x4 iMatrix;
}

Essa declaração inclui um modificador de interpolação.

struct In
{
  centroid float2 Texcoord;
};

Confira também

Tipos de dados (DirectX HLSL)