Compartilhar via


Tipo de Struct

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

struct Name{ [InterpolationModifier] Type[RxC] MemberName; ... };

Parâmetros

Nome

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.

Type[RxC]

O tipo de membro com um tamanho de matriz de linha (R) x (C) opcional. Uma estrutura contém pelo menos um elemento; se 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 lugares, o modificador externo (o modificador de argumento do sombreador de pixel) anulará o modificador interno (o modificador de estrutura).

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

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

Saídas de sombreador de vértice 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 uma entrada de sombreador de pixel.

Modificador de interpolação Descrição
Linear Interpolar entre entradas de sombreador; linear será o valor padrão se nenhum modificador de interpolação for especificado.
Centróide Interpolar entre exemplos que estão em algum lugar dentro da área coberta do pixel (isso pode exigir extrapolação de pontos finais de um centro de pixels). A amostragem de centroide poderá melhorar a suavização se um pixel for parcialmente coberto (mesmo que o centro de pixels não esteja coberto). O modificador centroide deve ser combinado com o modificador linear ou não específico.
nointerpolation Não interpole .
noperspective Não execute a correção de perspectiva durante a interpolação. O modificador não específico pode ser combinado com o modificador centroide .
sample Disponível no modelo de sombreador 4.1 e posterior Interpolar no local de exemplo em vez de no centro de pixels. Isso faz com que o sombreador de pixel execute por exemplo em vez de por pixel. Outra maneira de fazer com que a execução por exemplo seja ter uma entrada com SV_SampleIndex semântica, o que indica o exemplo atual. Somente as entradas com amostra especificada (ou SV_SampleIndex de entrada) diferem entre invocações de sombreador no pixel, enquanto outras entradas que não especificam modificadores (por exemplo, se você misturar modificadores em entradas diferentes) ainda interpolam no centro de pixels. Tanto a invocação do sombreador de pixel quanto o teste de profundidade/estêncil ocorrem para cada amostra coberta no pixel. Às vezes, isso é conhecido como supersampling. Por outro lado, na ausência de invocação de frequência de exemplo, conhecida como multisampling, 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 exemplo. Ambos os modos fornecem suavização de borda equivalente. No entanto, o supersampling 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**.

Modificadores de interpolação podem ser aplicados a membros de estrutura ou argumentos de 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)