packoffset
Palavra-chave de empacotamento de constante de sombreador opcional, que usa a seguinte sintaxe:
: packoffset( c[Subcomponent][.component] )
Parâmetros
Item | Descrição |
---|---|
packoffset |
Palavra-chave necessária. |
C |
O empacotamento se aplica somente a registros constantes (c). |
[Subcomponente] [.component] |
Subcomponentes e componentes opcionais. Um subcomponente é um número de registro, que é um inteiro. Um componente está na forma de [.xyzw]. |
Comentários
Use esse palavra-chave para empacotar manualmente uma constante de sombreador ao declarar um tipo de variável.
Ao empacotar uma constante, você não pode misturar tipos de constantes.
O compilador se comporta um pouco diferente para constantes globais e constantes uniformes:
- Uma constante global. Uma variável global é adicionada como uma constante global a uma $Global cbuffer pelo compilador. Os elementos empacotados automaticamente (aqueles declarados sem packoffset) aparecerão após a última variável empacotada manualmente. Você pode misturar tipos ao empacotar constantes globais.
- Uma constante uniforme. Um parâmetro uniforme na lista de parâmetros de uma função será adicionado a um buffer constante $Param pelo compilador quando o sombreador for compilado fora da estrutura de efeitos. Quando compilada dentro da estrutura de efeito, uma constante uniforme deve resolve a uma variável uniforme definida no escopo global. Uma constante uniforme não pode ser deslocada manualmente; seu uso recomendado é apenas para especialização de sombreadores em que eles são alias de volta para globais, não como um meio de passar dados do aplicativo para o sombreador.
Aqui estão alguns exemplos adicionais: empacotar constantes usando o modelo de sombreador 4.
Exemplos
Aqui estão vários exemplos de constantes de sombreador de empacotamento manual.
Empacote subcomponentes de vetores e escalares cujo tamanho é grande o suficiente para evitar a passagem de limites de registro. Por exemplo, todos eles são válidos:
cbuffer MyBuffer
{
float4 Element1 : packoffset(c0);
float1 Element2 : packoffset(c1);
float1 Element3 : packoffset(c1.y);
}