Paket | flash.display3D |
Klass | public final class Program3D |
Arv | Program3D Object |
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11, AIR 2 |
Program som hanteras av ett Program3D-objekt kontrollerar hela triangelåtergivningen under ett Context3D drawTriangles
-anrop. Skicka den binära bytekoden till återgivningssammanhanget med metoden upload
. (När den skickats refereras inte längre programmet i den ursprungliga byte-arrayen. Programmet ändras inte om du ändrar eller tar bort käll-byte-arrayen.)
Program består alltid av två länkade delar: Ett vertex- och ett fragment-program.
- Vertex-programmet används för data definierade i VertexBuffer3D-objekt och ser till att vertexar projiceras till klipputrymmen och att eventuella obligatoriska vertex-data skickas, till exempel som färg till fragment-skuggningen.
- Fragment-skuggningen används för attribut som skickas till den av vertex-program och skapar en färg för varje rastrerat fragment av en triangel, vilket resulterar i pixelfärger. Observera att fragment-program har flera namn i 3D-programmeringslitteraturen, inklusive fragment-skuggning och pixel-skuggning.
Bestäm vilket programpar som ska användas för efterföljande återgivningsåtgärder genom att skicka motsvarande Program3D-instans till Context3D-objektets setProgram()
-metod.
Det går inte skapa ett Program3D-objekt direkt, utan du ska i stället använda Context3D-objektets createProgram
-metod.
Relaterade API-element
Metod | Definieras med | ||
---|---|---|---|
Frigör alla resurser associerade med detta objekt. | Program3D | ||
Anger om det finns en egenskap angiven för ett objekt. | Object | ||
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. | Object | ||
Anger om den angivna egenskapen finns och är uppräkningsbar. | Object | ||
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. | Object | ||
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner. | Object | ||
Returnerar det angivna objektets strängbeteckning. | Object | ||
Överför två återgivningsprogram angivna i AGAL-bytekod (Adobe Graphics Assembly Language). | Program3D | ||
Returnerar det angivna objektets primitiva värde. | Object |
dispose | () | metod |
public function dispose():void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11, AIR 3 |
Frigör alla resurser associerade med detta objekt. Sedan ett Program3D-objekt rensats, kommer upload()-anrop och återgivningen som används för detta objekt att misslyckas.
upload | () | metod |
public function upload(vertexProgram:ByteArray, fragmentProgram:ByteArray):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11, AIR 3 |
Överför två återgivningsprogram angivna i AGAL-bytekod (Adobe Graphics Assembly Language).
Programbyte kan skapas med 3D-offlineverktygen för Pixel Bender 3D. Den kan även skapas dynamiskt. Klassen AGALMiniAssembler är en verktygsklass som kompilerar AGAL-assemblyspråkprogram till AGAL-bytekod. Klassen ingår inte i miljön. När du skickar skuggningsprogrammet, kompileras bytekoden till det interna skuggningsspråket för den aktuella enheten (till exempel OpenGL eller Direct3D). I miljön valideras bytekoden vid överföring.
Programmen körs när Context3D-objektets drawTriangles()
-metod anropas. Vertex-programmet körs en gång för varje vertex i listan med trianglar som ska ritas. Fragment-programmet körs en gång för varje pixel i en triangelyta.
De "variabler" som används i ett skuggningsprogram kallas register. Följande register är definierade:
Namn | Antal per fragment-program | Antal per vertex-program | Syfte |
---|---|---|---|
Attribut | ej tillämpligt | 8 | Vertex-skuggningsindata; läs från en vertex-buffert angiven med Context3D.setVertexBufferAt(). |
Konstant | 28 | 128 | Skuggningsindata; ange med Context3D.setProgramConstants()-familjens funktioner. |
Tillfällig | 8 | 8 | Tillfälligt register för beräkning, inte åtkomligt utanför program. |
Utdata | 1 | 1 | Skuggningsutdata: i ett vertex-program är utdata klipputrymmets position; i ett fragment-program är utdata en färg. |
Varierande | 8 | 8 | Överför interpolerade data mellan vertex- och fragment-skuggningar. De varierande registren från vertex-programmet används som indata till ett fragment-program. Värdena är interpolerade enligt avståndet från triangelhörnpunkterna. |
Sampler | 8 | ej tillämpligt | Fragment-skuggningsindata; läs från en textur angiven med Context3D.setTextureAt() |
Ett vertex-program tar emot indata från två källor: vertex-buffertar och konstantregister. Ange vilka vertex-data som ska användas för ett speciellt vertex-attributregister med Context3D-objektets setVertexBufferAt()
-metod. Du kan definiera upp till åtta indataregister för vertex-attribut. Vertex-attributvärden läses från vertex-bufferten för varje vertex i triangellistan och placeras i attributregistret. Ange konstantregister med Context3D-objektets setProgramConstantsFromMatrix()
- eller setProgramConstantsFromVector()
-metoder. Konstantregister behåller samma värde för varje vertex i triangellistan. (Du kan endast ändra konstantvärden mellan anrop till drawTriangles()
.)
Vertex-programmet ansvarar för projicering av triangelhörnpunkter till klipputrymmet (det kanoniska visningsområdet mellan ±1 på x- och y-axeln, och 0-1 på z-axeln) och för placering av de omformade koordinaterna i dess utdataregister. (Vanligtvis tillhandahålls lämplig projektionsmatris för skuggningen i en konstantregisteruppsättning.) Vertex-programmet måste även kopiera eventuella vertex-attribut eller beräknade värden som behövs för fragment-programmet till en speciell variabeluppsättning som kallas varierande register. När en fragment-skuggning körs, är det värde som finns i ett varierande register linjärt interpolerat i enlighet med avståndet för det aktuella fragmentet för varje triangelhörnpunkt.
Ett fragment-program tar emot indata från de varierande registren och från en separat uppsättning konstantregister (inställda med setProgramConstantsFromMatrix()
eller setProgramConstantsFromVector()
). Du kan även läsa texturdata från texturer skickade till återgivningssammanhanget med sampler-register. Ange vilken textur som du vill komma åt med ett speciellt sampler-register med hjälp av Context3D-objektets setTextureAt()
-metod. Fragment-programmet ansvarar för att ställa in dess utdataregister till ett färgvärde.
Parametrar
vertexProgram:ByteArray — AGAL-bytekod för vertex-programmet. För objektet ByteArray måste formatet little endian användas.
| |
fragmentProgram:ByteArray — AGAL-bytekod för fragment-programmet. För objektet ByteArray måste formatet little endian användas.
|
Utlöser
TypeError — Null-pekarfel: Om vertexProgram eller fragmentProgram är null.
| |
Error — Borttaget objekt: Om Program3D-objektet tas bort, antingen direkt via ett anrop till dispose() eller indirekt via anrop till Context3D dispose() , eller när återgivningssammanhanget tas bort på grund av enhetsförlust.
| |
ArgumentError — Agal-programmet är för litet: När någon programkodsarray är mindre än 31 byte lång. Detta är storleken på skuggningsbytekoden i ett program med en instruktion.
| |
ArgumentError — Programmet måste vara Little Endian: Om någon programbytekodsarray inte är Little Endian.
| |
Error — Intern skuggningskompilering misslyckades: Om utdata från AGAL-översättaren inte är ett kompileringsbart internt skuggningsspråkprogram. Det här felet genereras bara i utgivningsspelare.
| |
Error — Intern skuggningskompilering misslyckades OpenGL: Om utdata från AGAL-översättaren inte är ett kompileringsbart OpengGL-skuggningsspråkprogram och inkluderar kompileringsdiagnostik. Det här felet genereras bara i felsökningsspelare.
| |
Error — Intern skuggningskompilering misslyckades D3D9: Om utdata från AGAL-översättaren inte är ett kompileringsbart Direct3D-skuggningsspråkprogram och inkluderar kompileringsdiagnostik. Det här felet genereras bara i felsökningsspelare.
Följande fel genereras när AGAL-bytekodsvalideringen misslyckas: | |
Error — Inte ett AGAL-program: Om huvudets "magiska byte" är fel. Den första byten i bytekoden måste vara 0xa0. Detta fel kan indikera att byte-arrayen är inställd för fel endian-ordning.
| |
Error — Fel AGAL-version: Om AGAL-versionen inte stöds i den aktuella SWF-versionen. AGAL-versionen måste vara inställd på 1 för SWF-versionen 13.
| |
Error — Fel AGAL-programtyp: Om AGAL-programtyps-ID är ogiltigt. Den tredje byten i bytekoden måste vara 0xa1. Detta fel kan indikera att byte-arrayen är inställd för fel endian-ordning.
| |
Error — Fel AGAL-skuggningstyp: Om skuggningstypskoden varken är fragment eller vertex (1 eller 0).
| |
Error — Ogiltig AGAL-op-kod ligger utanför intervallet: Om en ogiltig opkod upptäcks i token-flödet.
| |
Error — Ogiltig AGAL-op-kod är inte implementerad: Om en ogiltig opkod upptäcks i token-flödet.
| |
Error — AGAL-opkod är endast tillåten i fragment-program: Om en opkod som endast är tillåten i fragment-program upptäcks i token-flödet för ett vertex-program, till exempel KIL eller TEX.
| |
Error — Fel operander för AGAL-källa: Om båda källoperander är konstantregister. Du måste beräkna resultatet utanför skuggningsprogrammet och skicka det med hjälp av ett konstantregister.
| |
Error — Båda operanderna är indirekta avläsningar: Om båda operanderna är indirekta avläsningar.
| |
Error — Opkodsmålet måste vara noll: Om en token med en opkod (t.ex. KIL) som inte har något mål, anger ett värde som inte är noll för målregistret.
| |
Error — Mask måste användas för opkodsmålet: Om en opkod som endast skapar ett trekomponentsresultat används utan maskering.
| |
Error — Allt för många token: Om det finns för många token (mer än 200) i ett AGAL-program.
| |
Error — Fragment-skuggningstyp: Om fragment-programtypen (byte 6 i fragmentProgram-parametern) inte är inställd på 1.
| |
Error — Vertex-skuggningstyp: Om vertex-programtypen (byte 6 i vertexProgram-parametern) inte är inställd på 0.
| |
Error — Varierande läsning, men inte skrivet till: Om fragment-skuggningen läser ett varierande register som aldrig har skrivits till med vertex-skuggningen.
| |
Error — Varierande partiell skrivning: Om ett varierande register endast skrivs delvis till. Alla komponenter i ett varierande register måste skrivas till.
| |
Error — Fragment-skrivning, alla komponenter: Om fragment-färgresultat endast delvis skrivs till. Alla fyra komponenter i färgresultat måste skrivas till.
| |
Error — Vertex-skrivning, alla komponenter: Om ett vertex-klipputrymmesresultat endast delvis skrivs till. Alla komponenter i ett vertex-klipputrymmesresultat måste skrivas till.
| |
Error — Oanvänd operand: Om en oanvänd operand i en token inte är noll.
| |
Error — Sampler-register tillåts bara i fragment: Om ett sampler-register för textur används i ett vertex-program.
| |
Error — Sampler-register andra operand: Om ett sampler-register används som mål eller första operand för en AGAL-token.
| |
Error — Indirekt tillåts bara i vertex: Om indirekt adressering används i ett fragment-program.
| |
Error — Indirekt tillåts bara till konstant register: Om indirekt adressering används i ett icke-konstant register.
| |
Error — Typ av indirekt källa: Om den indirekta källans typ inte är ett attributregister, ett konstantregister eller ett tillfälligt register.
| |
Error — Fält för indirekt adressering måste vara noll: Om inte alla fält för indirekt adressering är noll för direkt adressering.
| |
Error — Varierande register läses bara i fragment: Om ett varierande register läses i ett vertex-program. Varierande register kan bara skrivas i vertex-program och läsas i fragment-program.
| |
Error — Attributregister läses bara i vertex: Om ett attributregister läses i ett fragment-program. Attributregister kan bara läsas i vertex-program.
| |
Error — Det går inte att läsa utdataregister: Om ett utdataregister (position eller färg) läses. Det går bara att skriva till utdataregister, det går inte att läsa dem.
| |
Error — Tillfälligt register läst utan skrivning: Om ett tillfälligt register har lästs utan att det tidigare har skrivits.
| |
Error — Komponent i tillfälligt register läst utan skrivning: Om en specifik komponent i ett tillfälligt register har lästs utan att den tidigare har skrivits.
| |
Error — Det går inte att skriva till sampler-register: Vid skrivning till ett sampler-register. Det går bara att läsa sampler-register, det går inte att skriva till dem.
| |
Error — Skrivning till ett varierande register: Vid skrivning till ett varierande register i ett fragment-program. Varierande register kan bara skrivas i vertex-program och läsas i fragment-program.
| |
Error — Det går inte att skriva till attributregister: Vid skrivning till ett attributregister. Attributregister är skrivskyddade.
| |
Error — Det går inte att skriva till konstantregister: Vid skrivning till ett konstantregister i ett skuggningsprogram.
| |
Error — Målskrivningsmask är noll: Om en målskrivningsmask är noll. Alla komponenter i ett utdataregister måste anges.
| |
Error — Reserverade bitar för AGAL bör vara noll: Om någon reserverad bit i en token inte är noll. Detta tyder på ett fel när bytekoden skapades (eller felaktig bytekod).
| |
Error — Okänd registertyp: Om ett ogiltigt registertypsindex används.
| |
Error — Sampler-register utanför tillåtet intervall: Om ett ogiltigt sampler-registerindex används.
| |
Error — Varierande register utanför tillåtet intervall: Om ett ogiltigt varierande registerindex används.
| |
Error — Attributregister utanför tillåtet intervall: Om ett ogiltigt attributregisterindex används.
| |
Error — Konstantregister utanför tillåtet intervall: Om ett ogiltigt konstantregisterindex används.
| |
Error — Utdataregister utanför tillåtet intervall: Om ett ogiltigt utdataregisterindex används.
| |
Error — Tillfälligt register utanför tillåtet intervall: Om ett ogiltigt tillfälligt registerindex används.
| |
Error — Kubmappningssampler måste använda begränsning: Om en kubmappningssampler inte anger brytningsläget som begränsat.
| |
Error — Okänd sampler-dimension: Om en sampler använder en okänd sampler-dimension. (Endast 2D- och kubtexturer stöds.)
| |
Error — Okänt filterläge: Om en sampler använder ett okänt filterläge. (Endast närmaste granne och linjär filtrering stöds.)
| |
Error — Okänt mipmap-läge: Om en sampler använder ett okänt mipmap-läge. (Endast ingen, närmaste granne och linjär mapmappning stöds.)
| |
Error — Okänt brytningsläge: Om en sampler använder ett okänt brytningsläge. (Endast begränsat och upprepat brytningsläge stöds.)
| |
Error — Okänd specialflagga: Om en sampler använder en okänd specialflagga.
| |
Error — Utdatafärg inte maskeringsbar: Du kan inte maskera färgutdataregister i ett fragment-program. Alla komponenter i färgregistret måste anges.
| |
Error — Andra operanden måste vara sampler-register: AGAL-opkoden tex måste ha en sampler som andra källoperand.
| |
Error — Indirekt tillåts inte: Indirekt adressering används där det inte är tillåtet.
| |
Error — Swizzle måste vara skalär: Swizzling-fel.
| |
Error — Swizzle kan inte utföras för andra källan: Swizzling-fel.
| |
Error — Andra användningen av sampler måste ha samma parametrar: Alla samplers som använder samma textur måste använda samma inställningar för dimension, brytning, filter, special och mapmappning.
| |
Error — 3768: Programmeringsgränssnittet för Stage3D kan inte användas under bakgrundskörning.
|
Lär dig mer
Relaterade API-element
Tue Jun 12 2018, 01:40 PM Z