Paquete | flash.display3D |
Clase | public final class Program3D |
Herencia | Program3D Object |
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 2 |
Los programas gestionados por un objeto Program3D controlan todo el procesamiento de triángulos durante una llamada a Context3D drawTriangles()
. Cargue el código de bytes binario para el contexto de procesamiento con el método upload
. (Una vez cargado, el programa original en el conjunto de bytes deja de tener la referencia; cambiar o descartar el conjunto de bytes de origen no cambia el programa.)
Los programas siempre constan de dos partes vinculadas: un programa de vértices y un programa de fragmentos.
- El programa de vértices utiliza datos definidos en objetos VertexBuffer3D y es responsable de proyectar vértices en el espacio del clip y de transferir cualquier dato de vértice, como el color, al sombreador de fragmentos.
- El sombreador de fragmentos utiliza los atributos transferidos por el programa de vértices y produce un color para cada fragmento rasterizado de un triángulo, lo que da como resultado píxeles de colores. Hay que tener en cuenta que los programas de fragmentos pueden tener varios nombres en programación 3D, incluidos sombreador de fragmentos y sombreador de píxeles.
Designe qué par de programas utilizar en futuras operaciones de procesamiento transfiriendo la instancia correspondiente de Program3D al método setProgram()
Context3D.
No es posible crear un objeto Program3D directamente; utilice el método createProgram()
Context3D.
Elementos de API relacionados
Método | Definido por | ||
---|---|---|---|
Libera todos los recursos asociados a este objeto. | Program3D | ||
Indica si un objeto tiene definida una propiedad especificada. | Object | ||
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. | Object | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. | Object | ||
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional. | Object | ||
Devuelve la representación de cadena del objeto especificado. | Object | ||
Carga un par de programas de procesamiento expresados en código de bytes AGAL (Adobe Graphics Assembly Language). | Program3D | ||
Devuelve el valor simple del objeto especificado. | Object |
dispose | () | método |
public function dispose():void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Libera todos los recursos asociados a este objeto. Tras eliminar un objeto Program3D, llamar upload() y realizar el procesamiento con este objeto fallará.
upload | () | método |
public function upload(vertexProgram:ByteArray, fragmentProgram:ByteArray):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Carga un par de programas de procesamiento expresados en código de bytes AGAL (Adobe Graphics Assembly Language).
El código de bytes del programa se puede crear usando las herramientas 3D sin conexión de Pixel Bender. También se puede crearse dinámicamente. La clase AGALMiniAssembler es una clase de utilidad que compila programas de lenguaje ensamblador AGAL para código de bytes AGAL. La clase no forma parte de la ejecución. Cuando se cargan programas de sombreado, el código de bytes se compila en el lenguaje de sombreado nativo para el dispositivo actual (por ejemplo, OpenGL o Direct3D). El motor de ejecución valida el código de bytes al realizar la carga.
Los programas se ejecutan siempre que se invoca el método drawTriangles()
Context3D. El programa de vértices se ejecuta una vez para cada vértice en la lista de triángulos que se dibuja. El programa de fragmentos se ejecuta una vez para cada píxel en una superficie de triángulo.
Las “variables” utilizadas por un programa de sombreado se denominan registros. Se definen los registros siguientes:
Nombre | Número por programa de fragmentos | Número por programa de vértices | Objetivo |
---|---|---|---|
Attribute | No disponible | 8 | Entrada de sombreador de vértices; se lee desde un búfer de vértices especificado con Context3D.setVertexBufferAt(). |
Constant | 28 | 128 | Entrada de sombreador; se establece con la familia de funciones Context3D.setProgramConstants(). |
Temporary | 8 | 8 | Registro temporal para computación, no accesible desde fuera del programa. |
Output | 1 | 1 | Salida de sombreador: en un programa de vértices, el resultado es la posición del espacio del clip; en un programa de fragmentos, el resultado es un color. |
Varying | 8 | 8 | Transfiera datos interpolados entre sombreadores de vértices y fragmentos. Los registros variantes desde el programa de vértices se aplican como entrada para el programa de fragmentos. Los valores se interpolan según la distancia desde los vértices del triángulo. |
Sampler | 8 | No disponible | Entrada de sombreador de fragmentos; lee desde una textura especificada mediante Context3D.setTextureAt() |
Un programa de vértices recibe entrada de dos fuentes: búfer de vértices y registros de constantes. Especifique qué datos de vértice se utilizan para un registro de atributos de vértices determinado con el método setVertexBufferAt()
Context3D. Se pueden definir hasta ocho registros de entrada para atributos de vértices. Los valores de los atributos de vértice se leen desde el búfer de vértices para cada vértice de la lista de triángulos y se colocan en el registro de atributos. Especifique registros de constantes con el método setProgramConstantsFromMatrix()
o setProgramConstantsFromVector()
Context3D. Los registros de constantes conservan el mismo valor para cada vértice en la lista de triángulos. (Solo se pueden modificar los valores de constantes entre las llamadas a drawTriangles()
).
El programa de vértices es el responsable de proyectar los vértices del triángulo en espacio del clip (el área de visualización canónica dentro de ±1 en los ejes x e y, y 0-1 en el eje z) y de colocar las coordenadas transformadas en su registro de salida. (Normalmente, la matriz de proyección adecuada se proporciona al sombreador en un conjunto de registros de constantes.) El programa de vértices también debe copiar cualquier atributo de vértice o valor calculado que necesite el programa de fragmentos en un conjunto especial de variables llamado registro variante. Cuando se ejecuta un sombreador de fragmentos, el valor proporcionado en un registro variante se interpola linealmente según la distancia del fragmento actual de cada vértice del triángulo.
Un programa de fragmentos recibe entrada de los registros variantes y de un conjunto de registros de constantes (definidos con setProgramConstantsFromMatrix()
o setProgramConstantsFromVector()
). También se pueden leer datos de texturas desde texturas cargadas en el contexto de procesamiento con registros de muestreador. Especifique qué textura puede acceder a con un determinado registro de muestreador con el método setTextureAt()
Context3D. El programa de fragmentos es el responsable de establecer su registro de salida en un valor de color.
Parámetros
vertexProgram:ByteArray — Código de bytes de AGAL para el programa de vértices. El objeto ByteArray debe utilizar el formato little-endian.
| |
fragmentProgram:ByteArray — Código de bytes de AGAL para el programa de fragmentos. El objeto ByteArray debe utilizar el formato little-endian.
|
Emite
TypeError — Error de puntero nulo: si vertexProgram o fragmentProgram es null.
| |
Error — Objeto desechado: si el objeto se ha desechado Program3D ya sea directamente mediante una llamada al método dispose() , o indirectamente llamando al método dispose() de Context3D, o bien porque el contexto de procesamiento se ha desechado por pérdidas de dispositivo.
| |
ArgumentError — Programa AGAL demasiado pequeño: si la longitud del conjunto del código del programa es de menos de 31 bytes. Este es el tamaño del código de bytes de sombreado de un programa de una sola instrucción.
| |
ArgumentError — El programa debe ser little endian: si uno de los conjuntos de bytes del código del programa no es little endian.
| |
Error — Error de compilación nativa de sombreado: si la salida del traductor AGAL no es un programa de lenguaje de sombreado nativo compilable. Este error sólo se emite en reproductores publicados.
| |
Error — Error de compilación de sombreado nativo OpenGL: en versiones de depurador cuando la salida del traductor AGAL no es un programa de lenguaje de sombreado OpengGL compilable e incluye diagnóstico de compilación. Este error sólo se emite en reproductores de depuración.
| |
Error — Error de compilación de sombreado nativo D3D9: en versiones de depurador cuando la salida del traductor AGAL no es un programa de lenguaje de sombreado D3D9 compilable e incluye diagnóstico de compilación. Este error sólo se emite en reproductores de depuración.
Se emiten los siguientes errores cuando falla la validación del código de bytes AGAL: | |
Error — No es un programa AGAL: si el encabezado “magic byte” es incorrecto. El primer byte del código de bytes debe ser 0xa0. Este error puede indicar que el conjunto de bytes se establece en el orden endian incorrecto.
| |
Error — Versión incorrecta de AGAL: si la versión de AGAL no se admite en la versión actual del SWF. La versión de AGAL debe ser 1 para SWF con versión 13.
| |
Error — Tipo de programa AGAL incorrecto: si el identificador del tipo de programa AGAL no es válido. El tercer byte en el código de bytes debe ser 0xa1. Este error puede indicar que el conjunto de bytes se establece en el orden endian incorrecto.
| |
Error — Tipo de sombreador AGAL incorrecto: si el código del tipo de sombreador no es ni un fragmento ni un vértice (1 o 0).
| |
Error — Código de operación AGAL no válido y fuera de rango: si se encuentra un código de operación no válido en el flujo de símbolos.
| |
Error — Código de operación AGAL no válido implementado: si se encuentra un código de operación no válido en el flujo de símbolos.
| |
Error — Código de operación Agal sólo permitido en programa de fragmentos: si se ha encontrado un código de operación en el flujo del símbolo del programa de vértices que sólo está permitido en programas de fragmentos, como KIL o TEX.
| |
Error — Operandos de origen AGAL incorrectos: si los dos operandos de origen son registros de constantes. Debe calcular el resultado fuera del programa de sombreado y transferirlo con un solo registro de constantes.
| |
Error — Los dos operandos son lecturas indirectas: si ambos operandos son lecturas indirectas.
| |
Error — El destino del código de operación debe ser cero: si un símbolo con un código de operación (como KIL) que no tiene ningún destino define un valor distinto de cero para el registro de destinos.
| |
Error — El destino del código de operación debe utilizar máscara: si se utiliza sin máscara un código de operación que produce sólo un resultado de 3 componentes.
| |
Error — Demasiados símbolos: si hay demasiados símbolos (más de 200) en un programa AGAL.
| |
Error — Tipo de sombreador de fragmentos: si el tipo de programa de fragmentos (byte 6 del parámetro fragmentProgram) no está definido en 1.
| |
Error — Tipo de sombreador de vértices: si el tipo de programa de vértices (byte 6 del parámetro vertexProgram) no está establecido en 0.
| |
Error — Lectura en variante sin escritura: si el sombreador de fragmentos lee un registro variante que nunca fue escrito por el sombreador de vértices.
| |
Error — Escritura parcial en variante: si sólo se escribe parcialmente en un registro variante. Se debe escribir en todos los componentes del registro variante.
| |
Error — Escritura de fragmentos en todos los componentes: si sólo se escribe parcialmente una salida de color de fragmentos. Se debe escribir en los cuatro componentes de la salida de color.
| |
Error — Escritura de vértices en todos los componentes: si sólo se escribe parcialmente una salida de espacio de clips de vértices. Se debe escribir en todos los componentes de la salida de espacio de clip de vértices.
| |
Error — Operando no utilizado: si un operando no utilizado en un símbolo no se establece totalmente en cero.
| |
Error — Registro de muestreador sólo en el fragmento: si se utiliza un registro de muestreador de texturas en un programa de vértices.
| |
Error — Registro de muestreador en segundo operando: si se utiliza un registro de muestreador como destino o primer operando de un símbolo de AGAL.
| |
Error — Asignación indirecta solo permitida en vértice: si se utiliza la asignación indirecta en un programa de fragmentos.
| |
Error — Asignación indirecta sólo en registros de constantes: si se utiliza direccionamiento indirecto en un registro que no sea de constantes.
| |
Error — Tipo de origen indirecto: si el tipo de origen indirecto no es un atributo, una constante o un registro temporal.
| |
Error — Los campos de asignación indirecta deben ser cero: si no todos los campos de asignación indirecta son cero para la asignación directa.
| |
Error — Los registros de variantes sólo se leen en fragmentos: si un registro de variantes se lee en un programa de vértices. Los registros de variantes sólo se pueden escribir en programas vértices y leer en programas de fragmentos.
| |
Error — Los registros de atributos sólo se leen en vértices: si un registro de atributos se lee en un programa de fragmentos. Los registros de atributos sólo se pueden leer en programas de vértices.
| |
Error — No se puede leer el registro de salida: si se lee un registro (posición o color) de salida. Los registros de salida sólo se pueden escribir, no leer.
| |
Error — Lectura de registro temporal sin escritura: si se lee un registro temporal sin haber escrito anteriormente.
| |
Error — Lectura de componentes de registro temporal sin escritura: si se lee un componente específico de registro temporal sin haber escrito anteriormente.
| |
Error — No se puede escribir en registro de muestreador: si se escribe en un registro de muestreador. Los registros de muestreador sólo se pueden leer, no escribir en ellos.
| |
Error — Escritura en registros de variantes: si se escribe en un registro de variantes de un programa de fragmentos. Los registros de variantes sólo se pueden escribir en programas vértices y leer en programas de fragmentos.
| |
Error — No se puede escribir en registro de atributos: si se escribe en un registro de atributos. Los registros de atributos son de sólo lectura.
| |
Error — No se puede escribir en registro de constantes: si se escribe en un registro de constantes dentro de un programa de sombreado.
| |
Error — La máscara de escritura de destino es cero: si una máscara de escritura de destino es cero. Todos los componentes de un registro de salida deben estar definidos.
| |
Error — Los bits reservados de AGAL deben ser cero: si los bits reservados en un símbolo no son cero. Esto indica un error en la creación del código (o un código de bytes incorrecto).
| |
Error — Tipo de registro desconocido: si se utiliza un índice de tipo de registro no válido.
| |
Error — Registro de muestreador fuera de los límites: si se utiliza un índice de registro de muestreador no válido.
| |
Error — Registro de variantes fuera de los límites: si se utiliza un índice de registro de variantes no válido.
| |
Error — Registro de atributos fuera de los límites: si se utiliza un índice de registro de atributos no válido.
| |
Error — Registro de constantes fuera de los límites: si se utiliza un índice de registro de constantes no válido.
| |
Error — Registro de salida fuera de los límites: si se utiliza un índice de registro de salida no válido.
| |
Error — Registro temporal fuera de los límites: si se utiliza un índice de registro temporal no válido.
| |
Error — El muestreador de mapa cúbico debe usar fijación: si un muestreador de mapa cúbico no establece el modo de ajuste para la fijación.
| |
Error — Dimensión de muestreador desconocida: si una muestra utiliza una dimensión de muestreador desconocida. (Sólo se admiten texturas 2D y de cubo.)
| |
Error — Modo de filtro desconocido: si un muestreador utiliza un modo de filtro desconocido. (Sólo se admite filtrado por aproximación y lineal.)
| |
Error — Modo mipmap desconocido: si un muestreador utiliza un modo mipmap desconocido. (Sólo se admiten modos mipmap por aproximación, lineal y ausente.)
| |
Error — Modo de ajuste desconocido: si un muestreador utiliza un modo de ajuste desconocido. (Sólo se admiten modos de ajuste de fijación y de repetición.)
| |
Error — Indicador especial desconocido: si un muestreador utiliza un indicador especial desconocido.
| |
Error — Color de salida no enmascarable: no se puede enmascarar el registro de salida de color en un programa de fragmentos. Todos los componentes del registro de color se deben establecer.
| |
Error — El segundo operando debe ser registro de muestreador: el código de operación tex AGAL debe tener un muestreador como segundo operando de origen.
| |
Error — Asignación indirecta no permitida: la asignación indirecta se ha utilizado cuando no se permite.
| |
Error — La referencia debe ser escalar: error de referencia.
| |
Error — No se puede referenciar un segundo origen: error de referencia.
| |
Error — El segundo uso del muestreador debe tener los mismos parámetros: todos los muestreadores que muestras que tienen acceso a la misma textura debe utilizar la misma configuración de dimensión, ajuste, filtro, especial y mipmap.
| |
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.
|
Más información
Elementos de API relacionados
Tue Jun 12 2018, 02:12 PM Z