Pacchetto | flash.display3D |
Classe | public final class Program3D |
Ereditarietà | Program3D Object |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 2 |
I programmi gestiti da un oggetto Program3D controllano l'intero rendering dei triangoli durante una chiamata di Context3D drawTriangles()
. Caricate il codice byte binario nel contesto di rendering utilizzando il metodo upload
. (Dopo il caricamento, non esiste più alcun riferimento al programma nell'array di byte originale; la modifica o la rimozione dell'array di byte di origine non altera il programma.)
I programmi consistono sempre di due parti collegate: un programma di vertici e un programma di frammenti.
- Il programma di vertici opera sui dati definiti negli oggetti VertexBuffer3D ed è responsabile della proiezione dei vertici nello spazio clip e del passaggio allo shader dei frammenti degli eventuali dati di vertice richiesti, ad esempio relativi al colore.
- Lo shader dei frammenti opera sugli attributi che riceve dal programma dei vertici e produce un colore per ogni frammento rasterizzato di un triangolo, creando i colori dei pixel. Tenete presente che i programmi dei frammenti sono indicati con vari nomi nella letteratura di programmazione 3D, tra cui "fragment shader" (shader di frammenti) e "pixel shader" (shader di pixel).
Designate la coppia di programmi da utilizzare per le operazioni di rendering successive passando l'istanza Program3D del metodo Context3D setProgram()
.
Non è possibile creare un oggetto Program3D direttamente; utilizzate invece il metodo createProgram()
di Context3D.
Elementi API correlati
Metodo | Definito da | ||
---|---|---|---|
Libera tutte le GPU associate a questo oggetto. | Program3D | ||
Indica se per un oggetto è definita una proprietà specifica. | Object | ||
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. | Object | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. | Object | ||
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate. | Object | ||
Restituisce la rappresentazione in formato stringa dell'oggetto specificato. | Object | ||
Carica una coppia di programmi di rendering espressi nel linguaggio di codice byte AGAL (Adobe Graphics Assembly Language). | Program3D | ||
Restituisce il valore di base dell'oggetto specificato. | Object |
dispose | () | metodo |
public function dispose():void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Libera tutte le GPU associate a questo oggetto. Dopo la rimozione di un oggetto Program3D, eventuali chiamate di upload() e il rendering eseguito con questo oggetto hanno esito negativo.
upload | () | metodo |
public function upload(vertexProgram:ByteArray, fragmentProgram:ByteArray):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Carica una coppia di programmi di rendering espressi nel linguaggio di codice byte AGAL (Adobe Graphics Assembly Language).
Il codice byte del programma può essere creato utilizzando gli strumenti offline Pixel Bender 3D. Può anche essere creato dinamicamente. La classe AGALMiniAssembler è una classe di utilità che compila programmi in linguaggio assembly AGAL in codice byte AGAL. La classe non fa parte del runtime. Quando caricate i programmi shader, il codice byte viene compilato nel linguaggio shader nativo del dispositivo corrente (ad esempio OpenGL o Direct3D). Il runtime convalida il codice byte al momento del caricamento.
I programmi vengono eseguiti ogni volta che si chiama il metodo Context3D drawTriangles()
. Il programma dei vertici viene eseguito una volta per ogni vertice presente nell'elenco dei triangoli da disegnare. Il programma dei frammenti viene eseguito una volta per ciascun pixel presente sulla superficie di un triangolo.
Le "variabili" utilizzate da un programma shader sono denominate registri. Sono definiti i registri seguenti:
Nome | Numero per programma di frammenti | Numero per programma di vertici | Funzione |
---|---|---|---|
Attributo | n/d | 8 | Input dello shader di vertici; letto da un buffer di vertici specificato con Context3D.setVertexBufferAt(). |
Costante | 28 | 128 | Input dello shader; impostato con la famiglia di funzioni Context3D.setProgramConstants() |
Temporanea | 8 | 8 | Registro temporaneo per il calcolo, non accessibile dall'esterno del programma |
Output | 1 | 1 | Output dello shader: in un programma di vertici, l'output è la posizione dello spazio clip; in un programma di frammenti, l'output è un colore. |
Variabile | 8 | 8 | Trasferimento dei dati interpolati tra gli shader di vertici e di frammenti. I registri variabili del programma dei vertici vengono applicati come input al programma dei frammenti. I valori vengono interpolati in base alla distanza dai vertici del triangolo. |
Campionatore | 8 | n/d | Input dello shader di frammenti; letto da una texture specificata con Context3D.setTextureAt(). |
Un programma di vertici riceve l'input da due fonti: i buffer dei vertici e i registri costanti. Specificate quali dati di vertici utilizzare per un particolare registro attributi di vertice utilizzando il metodo Context3D setVertexBufferAt()
. È possibile definire fino a otto registri di input per gli attributi dei vertici. I valori degli attributi dei vertici vengono letti dal buffer dei vertici per ciascun vertice nell'elenco dei triangoli e inseriti nel registro attributi. Specificate i registri costanti utilizzando il metodo Context3D setProgramConstantsFromMatrix()
o setProgramConstantsFromVector()
. I registri costanti mantengono lo stesso valore per ogni vertice dell'elenco dei triangoli. (I valori delle costanti possono essere modificati solo tra chiamate drawTriangles()
.)
Il programma dei vertici esegue la proiezione dei vertici dei triangoli nello spazio clip (l'area di visualizzazione canonica entro ±1 sugli assi x e y e 0-1 sull'asse z) e posiziona le coordinate trasformate nel proprio registro di output. (Tipicamente, la matrice di proiezione appropriata viene fornita allo shader in una serie di registri costanti.) Il programma dei vertici deve anche copiare gli eventuali attributi di vertici o valori calcolati necessari al programma dei frammenti in una serie speciale di variabili denominate registri variabili. Quando uno shader di frammenti viene eseguito, il valore fornito in un registro variabile viene interpolato linearmente in base alla distanza del frammento corrente da ciascun vertice di triangolo.
Un programma di frammenti riceve l'input dai registri variabili e da una serie distinta di registri costanti (impostata con setProgramConstantsFromMatrix()
o setProgramConstantsFromVector()
). È anche possibile leggere i dati texture dalle texture caricate nel contesto di rendering utilizzando i registri campionatori. Specificate la texture alla quale accedere con un particolare registro campionatore utilizzando il metodo Context3D setTextureAt()
. Il programma dei frammenti provvede a impostare il proprio registro di output su un valore di colore.
Parametri
vertexProgram:ByteArray — Codice byte AGAL per il programma di vertici. L'oggetto ByteArray deve utilizzare il formato little endian.
| |
fragmentProgram:ByteArray — Codice byte AGAL per il programma di frammenti. L'oggetto ByteArray deve utilizzare il formato little endian.
|
Genera
TypeError — Puntatore nullo: se vertexProgram o fragmentProgram è null.
| |
Error — Oggetto rimosso: se l'oggetto Program3D è stato eliminato direttamente tramite una chiamata a dispose() o indirettamente da una chiamata dispose() di Context3D, oppure perché il contesto di rendering è stato rimosso a causa di una perdita del dispositivo.
| |
ArgumentError — Programma Agal troppo piccolo: quando la lunghezza dell'array di codice di uno dei programmi è inferiore a 31 byte. Questa è la dimensione del codice byte shader di un programma a istruzione singola.
| |
ArgumentError — Il programma deve essere little endian: se un array di codice byte di uno dei programmi non è little endian.
| |
Error — Compilazione shader nativo non riuscita: se l'output del traduttore AGAL non è un programma in linguaggio shader nativo compilabile. Questo errore viene generato solo nei lettori in versione release.
| |
Error — Compilazione shader nativo non riuscita (OpenGL): se l'output del traduttore AGAL non è un programma in linguaggio shader OpengGL compilabile e include una diagnostica di compilazione. Questo errore viene generato solo nei lettori in versione debug.
| |
Error — Compilazione shader nativo non riuscita (D3D9): se l'output del traduttore AGAL non è un programma in linguaggio shader Direct3D compilabile e include una diagnostica di compilazione. Questo errore viene generato solo nei lettori in versione debug.
Gli errori seguenti vengono generati quando la convalida del codice byte AGAL non riesce: | |
Error — Non è un programma Agal: se l'intestazione "magic byte" è errata. Il primo byte del codice byte deve essere 0xa0. Questo errore può indicare che l'array di byte è impostato sull'ordine endian errato.
| |
Error — Versione Agal errata: se la versione AGAL non è supportata dalla versione corrente SWF. La versione AGAL deve essere impostata su 1 per la versione SWF 13.
| |
Error — Tipo programma Agal errato: se l'identificatore del tipo di programma AGAL non è valido. Il terzo byte del codice byte deve essere 0xa1. Questo errore può indicare che l'array di byte è impostato sull'ordine endian errato.
| |
Error — Tipo di shader Agal errato: se il codice del tipo di shader non è un frammento né un vertice (1 o 0).
| |
Error — Codice operativo Agal non valido fuori intervallo: se viene rilevato un codice operativo non valido nel flusso di token.
| |
Error — Codice operativo Agal non implementato: se viene rilevato un codice operativo non valido nel flusso di token.
| |
Error — Codice operativo Agal consentito solo nel programma di frammenti: se nel flusso di token del programma di vertici viene rilevato un Opcode consentito solo nei programmi di frammenti, ad esempio KIL o TEX.
| |
Error — Operandi di origine Agal errati: se entrambi gli operandi di origine sono registri di costanti. Il risultato deve essere calcolato fuori del programma shader e passato utilizzando un solo registro di costanti.
| |
Error — Entrambi gli operandi sono letture indirette: se entrambi gli operandi sono il risultato di letture indirette.
| |
Error — Il codice operativo di destinazione deve contenere solo zero: se un token con un codice operativo (ad esempio KIL) privo di destinazione imposta un valore diverso da zero per il registro di destinazione.
| |
Error — La destinazione del codice operativo deve usare una maschera: se un codice operativo che produce solo un risultato a 3 componenti viene utilizzato senza mascheratura.
| |
Error — Troppi token: se in un programma AGAL sono presenti troppi token (oltre 200).
| |
Error — Tipo di shader di frammenti: se il tipo di programma di frammenti (byte 6 del parametro fragmentProgram) non è impostato su 1.
| |
Error — Tipo di shader di vertici: se il tipo di programma di vertici (byte 6 del parametro vertexProgram) non è impostato su 0.
| |
Error — Registro variabile letto ma non scritto: se lo shader di frammenti legge un registro variabile sul quale lo shader di vertici non ha mai scritto.
| |
Error — Scrittura parziale registro variabile: se la scrittura su un registro variabile è solo parziale. Tutti i componenti di un registro variabile devono essere scritti.
| |
Error — Scrittura parziale componenti frammento: se la scrittura sull'output di colore di un frammento è solo parziale. Tutti i quattro componenti dell'output del colore devono essere scritti.
| |
Error — Scrittura parziale componenti vertice: se la scrittura sull'output dello spazio clip di un vertice solo parziale. Tutti i componenti dell'output dello spazio clip dei vertici devono essere scritti.
| |
Error — Operando non utilizzato: se un operando inutilizzato in un token non è completamente impostato su zero.
| |
Error — Registro campionatore solo nel frammento: se viene utilizzato un registro campionatore di texture in un programma di vertici.
| |
Error — Registro campionatore secondo operando: se viene utilizzato un registro campionatore come destinazione o primo operando di un token AGAL.
| |
Error — Indirizzamento indiretto consentito solo nei vertici: se viene utilizzato l'indirizzamento indiretto in un programma di frammenti.
| |
Error — Indirizzamento indiretto solo nei registri di costanti: se viene utilizzato l'indirizzamento indiretto in un registro non di costanti.
| |
Error — Tipo di origine indiretta: se il tipo di origine indiretta non è un registro di attributi, di costanti o temporaneo.
| |
Error — I campi di indirizzamento indiretto devono essere zero: se non tutti i campi di indirizzamento indiretto sono impostati su zero per l'indirizzamento diretto.
| |
Error — Lettura registri variabili solo nei frammenti: se un registro variabile viene letto in un programma di vertici. I registri variabili possono essere scritti solo nei programmi di vertici e letti nei programmi di frammenti.
| |
Error — Lettura registri attributi solo nei vertici: se un registro attributi viene letto in un programma di frammenti. I registri di attributi possono essere letti solo nei programmi di vertici.
| |
Error — Impossibile leggere il registro di output: se viene letto un registro di output (posizione o colore). I registri di output possono essere scritti ma non letti.
| |
Error — Registro temporaneo letto ma non scritto: se viene letto un registro temporaneo senza essere stato scritto in precedenza.
| |
Error — Componente registro temporaneo letto ma non scritto: se un componente specifico di un registro temporaneo viene letto senza essere stato scritto in precedenza.
| |
Error — Impossibile scrivere su registro campionatore: se viene scritto un registro campionatore. I registri campionatori possono essere letti ma non scritti.
| |
Error — Scrittura registro variabile: se viene scritto un registro di variabili in un programma di frammenti. I registri variabili possono essere scritti solo nei programmi di vertici e letti nei programmi di frammenti.
| |
Error — Impossibile scrivere su registro attributi: se viene scritto un registro attributi. I registri attributi sono di sola lettura.
| |
Error — Impossibile scrivere su registro costanti: se viene scritto un registro costanti in un programma shader.
| |
Error — Writemask di destinazione uguale a zero: se una writemask di destinazione è pari a zero. Tutti i componenti di un registro di output devono essere impostati.
| |
Error — I bit di riserva AGAL devono essere uguali a zero: se gli eventuali bit riservati in un token non sono pari a zero. Indica un errore nella creazione del codice byte (o un codice byte con struttura errata).
| |
Error — Tipo di registro sconosciuto: se viene utilizzato un tipo di registro non valido.
| |
Error — Registro campionatore fuori dei limiti: se viene utilizzato un indice di registro campionatore non valido.
| |
Error — Registro variabile fuori dei limiti: se viene utilizzato un indice di registro variabile non valido.
| |
Error — Registro attributi fuori dei limiti: se viene utilizzato un indice di registro attributi non valido.
| |
Error — Registro costanti fuori dei limiti: se viene utilizzato un indice di registro costanti non valido.
| |
Error — Registro di output fuori dei limiti: se viene utilizzato un indice di registro output non valido.
| |
Error — Registro temporaneo fuori dei limiti: se viene utilizzato un indice di registro temporaneo non valido.
| |
Error — Il campionatore di mappa cubica deve usare la modalità fissa: se il campionatore di una mappa cubica non imposta la modalità di ritorno a capo su fissa.
| |
Error — Dimensione campionatore sconosciuta: se un campione utilizza una dimensione campionatore sconosciuta. (Sono supportate solo le texture 2D e cubiche.)
| |
Error — Modalità filtro sconosciuta: se un campionatore utilizza una modalità di filtro sconosciuta. (Sono supportate solo le modalità filtro nearest neighbor e lineare.)
| |
Error — Modalità mipmap sconosciuta: se un campionatore utilizza una modalità mipmap sconosciuta. (Sono supportate solo le modalità mipmap nessuna, nearest neighbor e lineare.)
| |
Error — Modalità wrapping sconosciuta: se un campionatore utilizza una modalità di wrapping sconosciuta. (Sono supportate solo le modalità di wrapping clamp e repeat.)
| |
Error — Flag speciale sconosciuto: se un campionatore utilizza un flag speciale sconosciuto.
| |
Error — Colore di output non mascherabile: non è possibile mascherare il registro del colore di output in un programma di frammenti. Tutti i componenti del registro di colore devono essere impostati.
| |
Error — Il secondo operando deve essere un registro campionatore: il codice operativo tex AGAL deve avere un campionatore come secondo operando di origine.
| |
Error — Indirizzamento indiretto non consentito: l'indirizzamento indiretto è stato utilizzato dove non è consentito.
| |
Error — Lo swizzle deve essere scalare: errore di swizzling.
| |
Error — Swizzling non consentito sulla seconda origine: errore di swizzling.
| |
Error — Il secondo utilizzo del campionatore deve avere alcuni parametri: tutti i campionatori che accedono alla stessa texture devono utilizzare le stesse impostazioni di dimensione, wrapping, filtro, speciali e mipmap.
| |
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.
|
Altre informazioni
Elementi API correlati
Tue Jun 12 2018, 02:44 PM Z