Pacote | flash.display3D |
Classe | public final class Program3D |
Herança | Program3D Object |
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 2 |
Os programas gerenciados por um objeto Program3D controlam a renderização inteira de triângulos durante uma chamada drawTriangles()
de Context3D. Carregue o bytecode binário no contexto de renderização utilizando o método upload
. (Uma vez carregado, o programa na matriz de bytes original não servirá como referência; alterar ou descartar a matriz de bytes de origem não alterará o programa.)
Os programas sempre são compostos por duas partes vinculadas: um vértice e um programa de fragmento.
- O programa de vértice funciona com dados definidos em objetos VertexBuffer3D e é responsável por projetar vértices no espaço de clipe e transmitir quaisquer dados de vértice obrigatórios, como cor, ao fragmento sombreador.
- O fragmento sombreador funciona com os atributos transmitidos para ele pelo programa de vértice e produz uma cor de cada fragmento rasterizado de um triângulo, resultando em cores de pixel. Observe que os programas de fragmento possuem vários nomes na literatura de programação 3D, incluindo o sombreador de fragmento e o sombreador de pixel.
Indique que par de programa deverá ser utilizado para operações de renderização subsequentes transmitindo a instância Program3D correspondente ao método Context3D setProgram ()
de Context3D.
Não é possível criar um objeto Program3D diretamente; em vez disso, utilize createProgram()
do Context3D.
Elementos da API relacionados
Método | Definido por | ||
---|---|---|---|
Liberta todos os recursos associados a esse objeto. | Program3D | ||
Indica se um objeto tem uma propriedade especificada definida. | Object | ||
Indica se uma ocorrência da classe Object está na cadeia de protótipos do objeto especificado como o parâmetro. | Object | ||
Indica se a propriedade especificada existe e é enumerável. | Object | ||
Define a disponibilidade de uma propriedade dinâmica para operações de repetição. | Object | ||
Retorna a representação da string deste objeto, formatado segundo as convenções específicas para a localidade. | Object | ||
Retorna a representação de string do objeto especificado. | Object | ||
Carrega um par de programas de renderização expressos em bytecode em AGAL (Adobe Graphics Assembly Language). | Program3D | ||
Retorna o valor primitivo do objeto especificado. | Object |
dispose | () | método |
public function dispose():void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Liberta todos os recursos associados a esse objeto. Após o descarte de um objeto de Program3D, ocorrerá uma falha na chamada upload() e de renderização utilizando este objeto.
upload | () | método |
public function upload(vertexProgram:ByteArray, fragmentProgram:ByteArray):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Carrega um par de programas de renderização expressos em bytecode em AGAL (Adobe Graphics Assembly Language).
O programa bytecode pode ser criado usando as ferramentas offline Pixel Bender 3D. Isso também pode ser criado dinamicamente. A classe AGALMiniAssembler é uma classe de utilitário que compila programas de idioma de agrupamento AGAL e bytecode AGAL. A classe não faz parte do tempo de execução. Ao carregar os programas sombreadores, o bytecode é compilado no idioma de sombreador nativo do dispositivo atual (por exemplo, OpenGL ou Direct3D). O tempo de execução valida o bytecode no carregamento.
Os programas serão executados sempre que o método Context3D drawTriangles ()
seja invocado. O programa de vértice é executado uma vez para cada vértice na lista de triângulos a serem desenhados. O programa de fragmento é executado uma vez para cada pixel em uma superfície de triângulo.
As "variáveis" utilizadas por um programa sombreador são denominadas registros. Os seguintes registros são definidos:
Nome | Número por programa de Fragmento | Número por programa de Vértice | Finalidade |
---|---|---|---|
Atributo | n/d | 8 | Entrada de sombreador de vértice; lê de um buffer de vértice especificado utilizando Context3D.setVertexBufferAt (). |
Constante | 28 | 128 | Entrada de sombreador; definido utilizando a família de funções Context3D.setProgramConstants (). |
Temporário | 8 | 8 | Registro temporário para computação, programa externo não-acessível. |
Saída | 1 | 1 | Saída de sombreador: em um programa de vértice, a saída é a posição clipspace; em um programa de fragmento, a saída é uma cor. |
Variação | 8 | 8 | Transfira dados interpolados entre vértice e sombreadores de fragmento. Os registros variados do programa de vértice são aplicados como entrada ao programa de fragmento. Os valores são interpolados conforme a distância dos vértices de triângulo. |
Mostruário | 8 | n/d | Entrada de sombreador de fragmento; lê de uma textura especificada utilizando Context3D.setTextureAt () |
Um programa de vértice recebe a entrada de duas origens: buffers de vértice e registros constantes. Especifique que dados de vértice deverão ser utilizados para um determinado registro de atributo de vértice utilizando o método setVertexBufferAt ()
de Context3D. É possível definir até oito registros de entrada de atributos de vértice. Os valores de atributo de vértice são lidos do buffer de vértice de cada vértice na lista de triângulo e são posicionados no registro de atributo. Especifique registros constantes que utilizem os métodos Context3D setProgramConstantsFromMatrix ()
ou setProgramConstantsFromVector ()
. Os registros constantes conservam o mesmo valor de cada vértice na lista de triângulo. (Você poderá alterar somente os valores constantes entre as chamadas drawTriangles ()
).
O programa de vértice é responsável por projetar os vértices de triângulo no espaço de clipe (a área de visualização canônica dentro de ±1 no x e eixos Y e 0-1 no eixo Z) e posicionar as coordenadas transformadas em seu registro de saída. (Normalmente, a matriz de projeção apropriada é fornecida ao sombreador em um conjunto de registros constantes.) O programa de vértice também deverá copiar qualquer atributo de vértice ou valores computados requisitados pelo programa de fragmento em um conjunto especial de variáveis denominadas registrosvariados. Quando um sombreador de fragmento for executado, o valor fornecido em um registro variado será interpolado linearmente conforme a distância do fragmento atual de cada vértice de triângulo.
Um programa de fragmento recebe a entrada dos registros variados e de um conjunto separado de registros constantes (conjunto com setProgramConstantsFromMatrix ()
ou setProgramConstantsFromVector ()
). Você também poderá ler dados de textura em texturas carregadas para o contexto de renderização utilizando registros de classificador. Especifique que textura acessar com um determinado registro de classificador utilizando o método setTextureAt ()
de Context3D. O programa de fragmento é responsável por definir seu registro de saída em um valor de cor.
Parâmetros
vertexProgram:ByteArray — Bytecode AGAL para o programa Vertex. O objeto ByteArray deverá utilizar o pequeno formato endiano.
| |
fragmentProgram:ByteArray — Bytecode AGAL para o programa Fragment. O objeto ByteArray deverá utilizar o pequeno formato endiano.
|
Lança
TypeError — Erro de ponteiro nulo: se vertexProgram ou fragmentProgram é nulo.
| |
Error — Objeto descartado: se o objeto Program3D é descartado diretamente por uma chamada pela dispose() , ou indiretamente pela chamada Context3D dispose() ou porque o contexto de renderização foi descartado devido à perda de dispositivo.
| |
ArgumentError — Programa Agal demasiado pequeno: quando qualquer matriz de código de programa é menor do que o comprimento de 31 bytes. Isto é o tamanho do código de bytes do sombreador de um programa de uma instrução.
| |
ArgumentError — Programa deve ser Little Endian: se o programa de matrizes de código de bytes não é little endian.
| |
Error — Falha na compilação do sombreador nativo: se a saída do tradutor AGAL não é um programa de idioma de sombreador nativo compilável. Este erro somente é lançado em players de versão.
| |
Error — Falha na compilação do sombreador nativo de OpenGL: se a saída do tradutor AGAL não é um programa de idioma de sombreador OpengGL e inclui diagnóstico de compilação. Este erro somente é lançado em players de depuração.
| |
Error — Falha na compilação do sombreador nativo de D3D9: se a saída do tradutor AGAL não é um programa de idioma de sombreador D3D9 e inclui diagnóstico de compilação. Este erro somente é lançado em players de depuração.
Os seguintes erros são lançados quando a validação de códigos de byte de AGAL falha: | |
Error — Não é Um Programa Agal: se o cabeçalho "byte mágico" estiver incorreto. O primeiro byte do bytecode deve ser 0xa0. Este erro pode indicar que a matriz de bytes é definida para a ordem de endiano incorreta.
| |
Error — Versão Agal Incorreta: se a versão AGAL não for suportada pela versão de SWF atual. A versão AGAL deverá ser definida em 1 para a versão 13 de SWF.
| |
Error — Tipo de Programa Agal Incorreto: se o identificador do tipo de programa AGAL não for válido. O terceiro byte no código de byte deve ser 0xa1. Este erro pode indicar que a matriz de bytes é definida para a ordem de endiano incorreta.
| |
Error — Tipo de Sombreador Agal Incorreto: se o código de tipo de sombreador não for fragmento ou vértice (1 ou 0).
| |
Error — Código de Operação Agal Inválido Fora de Alcance: se um código de operação inválido for encontrado no fluxo de símbolo.
| |
Error — Código de Operação Agal Inválido Não Implementado: se um código de operação inválido for encontrado no fluxo de símbolo.
| |
Error — Código de Operação Agal Permitido no Programa de Fragmento: se um código de operação inválido for encontrado no fluxo de símbolo do programa de vértice que seja permitido somente em programas de fragmento, como o KIL ou TEX.
| |
Error — Operandos de Origem Agal Incorretos: se origem e operandos forem registros constantes. Você deverá computar o resultado fora do programa sombreador e transmiti-lo utilizando um único registro constante.
| |
Error — Ambos os Operandos São Leituras Indiretas: se ambos os operandos forem leituras indiretas.
| |
Error — Destino de Código de Operação Deve Ser Zero: se um símbolo com um código de operação (como KIL) que não possuir nenhum destino definir um valor diferente de zero para o registro de destino.
| |
Error — Destino de Código de Operação Deve Utilizar Máscara: se um código de operação que produz somente um resultado de 3 componentes for utilizado sem mascaramento.
| |
Error — Muitos Símbolos: se houver muitos símbolos (mais de 200) em um programa AGAL.
| |
Error — Tipo sombreador de Fragmento: se o tipo de programa de fragmento (byte 6 do parâmetro fragmentProgram) não for definido em 1.
| |
Error — Tipo de Sombreador de Vértice: se o tipo de programa de vértice (byte 6 do parâmetro vertexProgram) não for definido em 0.
| |
Error — Leitura Variada Mas Não Gravada Em: se o sombreador do fragmento lê um registro variado que nunca foi gravado pelo sombreador do vértice.
| |
Error — Gravação Parcial Variada: se um registro variado for somente parcialmente gravado. Todos os componentes de um registro de variação devem ser gravados.
| |
Error — Fragmento Gravar Todos os Componentes: se uma saída de cor de fragmento for somente parcialmente gravada. Todos os quatro componentes da saída de cores deverão ser gravados.
| |
Error — Vértice Gravar Todos os Componentes: se um clipe de vértice for somente parcialmente gravado. Todos os componentes da saída espacial de clipe do vértice devem ser gravados.
| |
Error — Operando não usado: se um operando não usado em um símbolo não está definido em zero.
| |
Error — Registro de amostra só em fragmento: se um registro de amostra de textura é usado em um programa de vértice.
| |
Error — Registro de amostra no segundo operando: se um registro de amostra é usado como um destino ou primeiro operando de um símbolo AGAL.
| |
Error — Indireto só permitido em vértice: se o endereçamento indireto é usado em um programa de fragmento.
| |
Error — Indireto só em registros constantes: se o endereçamento indireto é usado um registro não constante.
| |
Error — Tipo de origem indireta: se o tipo de origem indireta não é atributo, registro constante ou temporário.
| |
Error — Campos de endereçamento indiretos devem ser zero: se nem todos os campos de endereçamento indiretos forem zero para endereçamento direto.
| |
Error — Registros variados só lidos em fragmento: se um registro variado é lido em um programa de vértice. Os registros variados só podem ser gravados em programas de vértice e lidos em programas de fragmento.
| |
Error — Registros de atributo só lidos em vértice: se um registro de atributo é lido em um programa de fragmento. Os registros de atributo só podem ser lidos em programas de vértice.
| |
Error — Não é possível ler registro de saída: se um registro de saída (posição ou cor) é lido. Os registros de saída só podem ser gravados, não lidos.
| |
Error — Registro temporário lido sem gravação: se um registro temporário é lido sem ser gravado anteriormente.
| |
Error — Componente de registro temporário lido sem gravação: se um componente de registro temporário específico é lido sem ser gravado anteriormente.
| |
Error — Registro de amostra não pode ser gravado para: se um registro de amostra é gravado. Os registros de amostra só podem ser lidos, não gravados.
| |
Error — Gravação de registros variados: se um registro variado é gravado em um programa de fragmento. Os registros variados só podem ser gravados em programas de vértice e lidos em programas de fragmento.
| |
Error — Registro de atributo não pode ser gravado: se um registro de atributo é gravado. Os registros de atributo são só de leitura.
| |
Error — Registro constante não pode ser gravado: se um registro constante é gravado dentro de um programa de sombreador.
| |
Error — O destino Writemask é zero: se um destino writemask é zero. Todos os componentes de um registro de saída devem ser definidos.
| |
Error — Bits Reservados de AGAL devem ser zero: se algum bit reservado em um símbolo não é zero. Isto indica um erro ao criar o bytecode (ou bytecode malformado).
| |
Error — Tipo de registro desconhecido: se um índice de tipo de registro inválido é usado.
| |
Error — Registro de amostra fora de limites: se um índice de registro de amostra inválido é usado.
| |
Error — Registro variado fora de limites: se um índice de registro variado inválido é usado.
| |
Error — Registro de atributo fora de limites: se um índice de registro de atributo inválido é usado.
| |
Error — Registro constante fora de limites: se um índice de registro constante inválido é usado.
| |
Error — Registro de saída fora de limites: se um índice de registro de saída inválido é usado.
| |
Error — Registro temporário fora de limites: se um índice de registro temporário inválido é usado.
| |
Error — Amostra de mapa de cubo deve usar fixação: se uma amostra de mapa de cubo não está definida no modo de quebra automática de linha para fixar.
| |
Error — Dimensão de amostra desconhecida: se uma amostra usa uma dimensão de amostra desconhecida. (Só o 2D e as texturas de cubo são suportadas).
| |
Error — Modo de filtro desconhecido: se uma amostra usa um modo de filtro desconhecido. (Só o vizinho mais próximo e a filtração linear são suportados).
| |
Error — Modo mipmap desconhecido: se uma amostras usa um modo mipmap desconhecido. (Só nenhum, o vizinho mais próximo, e os modos mipmap lineares são suportados).
| |
Error — Modo de quebra desconhecido: se uma amostra usa um modo de quebra desconhecido. (Só a fixação e os modos de quebra são suportados).
| |
Error — Sinalizador especial desconhecido: se uma amostra usa um sinalizador especial desconhecido.
| |
Error — Cor de saída não mascarável: não é possível mascarar o registro de saída a cores em um programa de fragmento. Todos os componentes do registro a cores devem ser definidos.
| |
Error — Segundo operando deve ser registro de amostra: a textura opcode do AGAL deve ter uma amostra como segundooperando de origem.
| |
Error — Indireto não permitido: endereçamento indireto usado onde não permitido.
| |
Error — Swizzle deve ser escalar: erro de swizzling.
| |
Error — Não é possível uma segunda origem de swizzle: erro de swizzling.
| |
Error — Segundo uso da amostra deve ter mesmos parâmetros: todas as amostras que acessam a mesma textura devem usar a mesma dimensão, quebra automática de linha, filtro, configurações especiais, e mipmap.
| |
Error — 3768: a API do Stage3D não pode ser usada durante a execução de fundo.
|
Saiba mais
Elementos da API relacionados
Wed Jun 13 2018, 11:10 AM Z