패키지 | flash.display3D |
클래스 | public final class Program3D |
상속 | Program3D Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 2 |
Program3D 객체를 통해 관리되는 프로그램은 Context3D drawTriangles()
호출 도중 삼각형의 전체 렌더링을 제어합니다. upload
메서드를 사용하여 이진 바이트 코드를 렌더링 컨텍스트로 업로드합니다. 업로드하고 나면 원래 바이트 배열의 프로그램은 더 이상 참조되지 않습니다. 즉, 소스 바이트 배열을 변경 또는 삭제해도 프로그램이 변경되지 않습니다.
프로그램은 항상 두 개의 연결된 부분인 꼭지점 및 조각 프로그램으로 구성됩니다.
- 꼭지점 프로그램은 VertexBuffer3D 객체에 정의된 데이터에서 작동하면서 꼭지점을 클립 공간에 투명하고 색상 등의 필요한 꼭지점 데이터를 조각 셰이더에 전달하는 역할을 수행합니다.
- 조각 셰이더는 꼭지점 프로그램이 전달한 특성에서 작동하고 삼각형의 모든 래스터화된 조각에 대한 색상을 생성하여 결과적으로 픽셀 색상을 만듭니다. 조각 프로그램은 3D 프로그래밍 문서에서 조각 셰이더, 픽셀 셰이더 등의 여러 이름으로 되어 있습니다.
해당 Program3D 인스턴스를 Context3D setProgram()
메서드에 전달하여 후속 렌더링 작업에 사용할 프로그램 쌍을 지정합니다.
Program3D 객체를 직접 만들 수는 없으며 대신 Context3D createProgram()
메서드를 사용합니다.
관련 API 요소
메서드 | 정의 주체 | ||
---|---|---|---|
이 객체와 연결된 모든 리소스를 해제합니다. | Program3D | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
AGAL(Adobe Graphics Assembly Language) 바이트 코드로 표현된 렌더링 프로그램 쌍을 업로드합니다. | Program3D | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object |
dispose | () | 메서드 |
public function dispose():void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 3 |
이 객체와 연결된 모든 리소스를 해제합니다. Program3D 객체를 삭제한 후 upload() 호출 및 이 객체를 사용한 렌더링은 실패합니다.
upload | () | 메서드 |
public function upload(vertexProgram:ByteArray, fragmentProgram:ByteArray):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 3 |
AGAL(Adobe Graphics Assembly Language) 바이트 코드로 표현된 렌더링 프로그램 쌍을 업로드합니다.
Pixel Bender 3D 오프라인 도구를 사용하여 프로그램 바이트 코드를 만들 수 있습니다. 또한 동적으로 만들 수도 있습니다. AGALMiniAssembler 클래스는 AGAL 어셈블리 언어 프로그램을 AGAL 바이트 코드에 컴파일하는 유틸리티 클래스입니다. 이 클래스는 런타임의 일부가 아닙니다. 셰이더 프로그램을 업로드할 경우 바이트 코드는 현재 장치의 기본 셰이더 언어로 컴파일됩니다(예: OpenGL 또는 Direct3D). 런타임은 업로드 시에 바이트 코드의 유효성을 검사합니다.
프로그램은 Context3D drawTriangles()
메서드가 호출될 때마다 실행됩니다. 꼭지점 프로그램은 그릴 삼각형 목록의 각 꼭지점에 대해 한 번씩 실행됩니다. 조각 프로그램은 삼각형 표면의 각 픽셀에 대해 한 번씩 실행됩니다.
셰이더 프로그램에 사용되는 "변수"를 레지스터라고 합니다. 다음 레지스터가 정의됩니다.
이름 | 조각 프로그램당 수 | 꼭지점 프로그램당 수 | 용도 |
---|---|---|---|
특성 | 해당 사항 없음 | 8 | 꼭지점 셰이더 입력(Context3D.setVertexBufferAt()을 사용하여 지정된 꼭지점 버퍼에서 읽기) |
상수 | 28 | 128 | 셰이더 입력(Context3D.setProgramConstants() 함수 모음을 사용하여 설정) |
임시 | 8 | 8 | 프로그램 외부에서 액세스할 수 없는 계산을 위한 임시 레지스터 |
출력 | 1 | 1 | 셰이더 출력(꼭지점 프로그램의 경우 출력은 클립 공간 위치이고 조각 프로그램의 경우 출력은 색상임) |
변형 | 8 | 8 | 꼭지점 및 조각 세이더 간에 보간된 데이터를 전송합니다. 꼭지점 프로그램의 변형 레지스터는 조각 프로그램에 입력으로 적용됩니다. 값은 삼각형 꼭지점으로부터의 거리에 따라 보간됩니다. |
샘플러 | 8 | 해당 사항 없음 | 조각 셰이더 입력(Context3D.setTextureAt()을 사용하여 지정된 텍스처에서 읽기) |
꼭지점 프로그램은 두 개의 소스인 꼭지점 버퍼 및 상수 레지스터로부터 입력을 수신합니다. Context3D setVertexBufferAt()
메서드를 사용하여 특정 꼭지점 attribute 레지스터에 사용할 꼭지점 데이터를 지정합니다. 최대 8개의 입력 레지스터를 꼭지점 특성에 정의할 수 있습니다. 꼭지점 특성 값은 삼각형 목록의 각 꼭지점에 대한 꼭지점 버퍼에서 읽어서 특성 레지스터에 배치됩니다. Context3D setProgramConstantsFromMatrix()
또는 setProgramConstantsFromVector()
메서드를 사용하여 constant 레지스터를 지정합니다. 상수 레지스터는 삼각형 목록의 모든 꼭지점에 동일한 값을 유지합니다. drawTriangles()
호출 사이에만 상수 값을 수정할 수 있습니다.
꼭지점 프로그램은 삼각형 꼭지점을 클립 공간(x 및 y 축에서는 ±1, z 축에서는 0-1 내의 정규 보기 영역)에 투영하고 변환된 좌표를 해당 출력 레지스터에 배치하는 역할을 수행합니다. 일반적으로 적절한 투영 행렬이 상수 레지스터 집합의 셰이더에 제공됩니다. 또한 꼭지점 프로그램은 조각 프로그램에 필요한 모든 꼭지점 특성 또는 계산된 값을 변형 레지스터라는 특수한 변수 집합에 복사합니다. 조각 세이더가 실행될 경우 변형 레지스터에 제공된 값은 각 삼각형 꼭지점으로부터 현재 조각까지의 거리에 따라 선형으로 보간됩니다.
조각 프로그램은 변형 레지스터 및 별도의 상수 레지스터 집합(setProgramConstantsFromMatrix()
또는 setProgramConstantsFromVector()
를 사용하여 설정)에서 입력을 수신합니다. 샘플러 레지스터를 사용하여 렌더링 컨텍스트에 업로드된 텍스처에서 텍스처 데이터를 읽을 수도 있습니다. Context3D setTextureAt()
메서드를 사용하여 특정 샘플 레지스터로 액세스할 레지스터를 지정합니다. 조각 프로그램은 해당 출력 레지스터를 색상 값으로 설정하는 역할을 수행합니다.
매개 변수
vertexProgram:ByteArray — 꼭지점 프로그램에 대한 AGAL 바이트 코드입니다. ByteArray 객체는 little endian 형식을 사용해야 합니다.
| |
fragmentProgram:ByteArray — 조각 프로그램에 대한 AGAL 바이트 코드입니다. ByteArray 객체는 little endian 형식을 사용해야 합니다.
|
오류
TypeError — Null 포인터 오류: vertexProgram 또는 fragmentProgram 이 null인 경우입니다.
| |
Error — 객체 삭제됨: dispose() 를 호출(간접)하거나 Context3D dispose() 를 호출(간접)하는 방식으로 또는 장치 손실로 인해 렌더링 컨텍스트가 삭제되었기 때문에 Program3D 객체가 삭제된 경우입니다.
| |
ArgumentError — AGAL 프로그램이 너무 작음: 프로그램 코드 배열의 길이가 31바이트보다 작은 경우입니다. 이는 한 명령어 프로그램의 셰이더 바이트 코드 크기입니다.
| |
ArgumentError — 프로그램이 Little Endian이어야 함: 어느 한쪽 프로그램 바이트 코드 배열이 little endian이 아닌 경우입니다.
| |
Error — 기본 셰이더 컴파일 실패: AGAL 변환기의 출력이 컴파일 가능한 기본 셰이더 언어 프로그램이 아닌 경우입니다. 이 오류는 릴리스 플레이어에서만 발생합니다.
| |
Error — 기본 셰이더 컴파일 실패(OpenGL): AGAL 변환기의 출력이 컴파일 가능한 OpengGL 셰이더 언어 프로그램이 아니며 컴파일 진단을 포함한 경우입니다. 이 오류는 디버그 플레이어에서만 발생합니다.
| |
Error — 기본 셰이더 컴파일 실패(D3D9): AGAL 변환기의 출력이 컴파일 가능한 Direct3D 셰이더 언어 프로그램이 아니며 컴파일 진단을 포함한 경우입니다. 이 오류는 디버그 플레이어에서만 발생합니다.
AGAL 바이트 코드 유효성 검사에 실패하면 다음과 같은 오류가 발생합니다. | |
Error — AGAL 프로그램이 아님: "magic byte" 헤더가 잘못된 경우입니다. 바이트 코드의 첫 번째 바이트는 0xa0이어야 합니다. 이 오류는 바이트 배열이 잘못된 endian 순서로 설정되었다는 것을 나타낼 수 있습니다.
| |
Error — 잘못된 AGAL 버전: 현재 SWF 버전이 AGAL 버전을 지원하지 않을 경우입니다. SWF 버전 13의 경우 AGAL 버전은 1로 설정되어야 합니다.
| |
Error — 잘못된 AGAL 프로그램 유형: AGAL 프로그램 유형 식별자가 유효하지 않은 경우입니다. 바이트 코드의 세 번째 바이트는 0xa1이어야 합니다. 이 오류는 바이트 배열이 잘못된 endian 순서로 설정되었다는 것을 나타낼 수 있습니다.
| |
Error — 잘못된 AGAL 셰이더 유형: 셰이더 유형 코드가 조각 또는 꼭지점(1 또는 0)이 아닌 경우입니다.
| |
Error — 벗위를 벗어난 잘못된 AGAL Opcode임: 토큰 스트림에서 잘못된 opcode가 발견된 경우입니다.
| |
Error — 구현되지 않은 잘못된 AGAL Opcode임: 토큰 스트림에서 잘못된 opcode가 발견된 경우입니다.
| |
Error — 조각 프로그램에서만 허용되는 AGAL Opcode임: 꼭지점 프로그램의 토큰 스트림에서 조각 프로그램에만 허용되는 KIL 또는 TEX 등의 opcode가 발견된 경우입니다.
| |
Error — 잘못된 AGAL 소스 피연산자: 두 소스 피연산자가 모두 상수 레지스터인 경우입니다. 셰이더 프로그램 외부에서 결과를 계산하고 단일 상수 레지스터를 사용하여 전달해야 합니다.
| |
Error — 두 피연산자가 모두 간접 읽기임: 두 피연산자가 모두 간접 읽기인 경우입니다.
| |
Error — Opcode 대상이 모두 0이어야 함: 대상이 없는 opcode(예: KIL)를 가진 토큰이 대상 레지스터에 0이 아닌 값을 설정할 경우입니다.
| |
Error — Opcode 대상에서 마스크를 사용해야 함: 3요소 결과만 산출하는 opcode가 마스킹 없이 사용될 경우입니다.
| |
Error — 토큰이 너무 많음: AGAL 프로그램에 토큰이 너무 많은 경우입니다(200개 초과).
| |
Error — 조각 셰이더 유형: 조각 프로그램 유형(fragmentProgram 매개 변수의 6번째 바이트)이 1로 설정되지 않은 경우입니다.
| |
Error — 꼭지점 셰이더 유형: 꼭지점 프로그램 유형(vertexProgram 매개 변수의 6번째 바이트)이 0으로 설정되지 않은 경우입니다.
| |
Error — 기록되지 않은 변형 레지스터를 읽음: 조각 셰이더가 꼭지점 셰이더에 기록되지 않은 변형 레지스터를 읽는 경우입니다.
| |
Error — 변형 레지스터를 일부만 기록함: 변형 레지스터의 일부만 기록될 경우입니다. 변형 레지스터의 모든 구성 요소가 기록되어야 합니다.
| |
Error — 조각에서 모든 구성 요소 기록: 조각 색상 출력의 일부만 기록될 경우입니다. 색상 출력의 네 구성 요소가 모두 기록되어야 합니다.
| |
Error — 꼭지점에서 모든 구성 요소 기록: 꼭기점 클립 공간 출력의 일부만 기록될 경우입니다. 꼭지점 클립 공간 출력의 모든 요소가 기록되어야 합니다.
| |
Error — 사용되지 않는 피연산자: 토큰에서 사용되지 않는 피연산자가 모두 0으로 설정되지 않은 경우입니다.
| |
Error — 샘플러 레지스터는 조각 프로그램에서만 사용할 수 있음: 텍스처 샘플러 레지스터가 꼭지점 프로그램에서 사용된 경우입니다.
| |
Error — 샘플러 레지스터는 두 번째 피연산자로 사용해야 함: 샘플러 레지스터가 AGAL 토큰의 대상 또는 첫 번째 피연산자로 사용된 경우입니다.
| |
Error — 간접 주소 지정은 꼭지점 프로그램에서만 사용할 수 있음: 간접 주소 지정이 조각 프로그램에서 사용된 경우입니다.
| |
Error — 간접 주소 지정은 상수 레지스터에 있어야 함: 간접 주소 지정이 상수가 아닌 레지스터에 사용된 경우입니다.
| |
Error — 간접 소스 유형: 간접 소스 유형이 특성, 상수 또는 임시 레지스터가 아닌 경우입니다.
| |
Error — 간접 주소 지정 필드는 0이어야 함: 일부 간접 주소 지정 필드가 직접 주소 지정에 대해 0이 아닌 경우입니다.
| |
Error — 변형 레지스터는 조각 프로그램에서만 읽어야 함: 변형 레지스터를 꼭지점 프로그램에서 읽은 경우입니다. 변형 레지스터는 꼭지점 프로그램에서만 쓰고 조각 프로그램에서만 읽을 수 있습니다
| |
Error — 특성 레지스터는 꼭지점 프로그램에서만 읽어야 함: 특성 레지스터를 조각 프로그램에서 읽은 경우입니다. 특성 레지스터는 꼭지점 프로그램에서만 읽을 수 있습니다.
| |
Error — 출력 레지스터는 읽을 수 없음: 출력(위치 또는 색상) 레지스터를 읽은 경우입니다. 출력 레지스터는 읽지는 못하고 값을 쓸 수만 있습니다.
| |
Error — 임시 레지스터를 쓰지 않고 읽음: 이전에 값을 쓰지 않은 임시 레지스터를 읽은 경우입니다.
| |
Error — 임시 레지스터 구성 요소를 쓰지 않고 읽음: 이전에 값을 쓰지 않은 특정 임시 레지스터 구성 요소를 읽은 경우입니다.
| |
Error — 샘플러 레지스터에는 값을 쓸 수 없음: 샘플러 레지스터에 값을 쓴 경우입니다. 샘플러 레지스터에는 값을 쓰지 못하고 읽을 수만 있습니다.
| |
Error — 변형 레지스터 쓰기: 조각 프로그램에서 변형 레지스터에 값을 쓴 경우입니다. 변형 레지스터는 꼭지점 프로그램에서만 쓰고 조각 프로그램에서만 읽을 수 있습니다
| |
Error — 특성 레지스터에는 값을 쓸 수 없음: 특성 레지스터에 값을 쓴 경우입니다. 특성 레지스터는 읽기 전용입니다.
| |
Error — 상수 레지스터에는 값을 쓸 수 없음: 셰이더 프로그램 내에서 상수 레지스터에 값을 쓴 경우입니다.
| |
Error — 대상 쓰기 마스크가 0임: 대상 쓰기 마스크가 0인 경우입니다. 출력 레지스터의 모든 구성 요소를 설정해야 합니다.
| |
Error — AGAL의 예약된 비트는 0이어야 함: 토큰의 예약된 비트가 0이 아닌 경우입니다. 이는 바이트 코드를 만드는 도중 오류가 발생했거나 바이트 코드의 형식이 잘못되었음을 나타냅니다.
| |
Error — 알 수 없는 레지스터 유형: 잘못된 레지스터 유형 인덱스가 사용된 경우입니다.
| |
Error — 샘플러 레지스터가 경계를 벗어남: 잘못된 샘플러 레지스터 인덱스가 사용된 경우입니다.
| |
Error — 변환 레지스터가 경계를 벗어남: 잘못된 변환 레지스터 인덱스가 사용된 경우입니다.
| |
Error — 특성 레지스터가 경계를 벗어남: 잘못된 특성 레지스터 인덱스가 사용된 경우입니다.
| |
Error — 상수 레지스터가 경계를 벗어남: 잘못된 상수 레지스터 인덱스가 사용된 경우입니다.
| |
Error — 출력 레지스터가 경계를 벗어남: 잘못된 출력 레지스터 인덱스가 사용된 경우입니다.
| |
Error — 임시 레지스터가 경계를 벗어남: 잘못된 임시 레지스터 인덱스가 사용된 경우입니다.
| |
Error — 정육면체 맵 샘플러는 클램프를 사용해야 함: 정육면체 맵 샘플러가 래핑 모드를 clamp로 설정하지 않은 경우입니다.
| |
Error — 알 수 없는 샘플러 크기: 샘플이 알 수 없는 샘플러 크기를 사용한 경우입니다. 2D 및 정육면체 텍스처만 지원됩니다.
| |
Error — 알 수 없는 필터 모드: 샘플러가 알 수 없는 필터 모드를 사용한 경우입니다. 최단인접 및 선형 필터링만 지원됩니다.
| |
Error — 알 수 없는 밉맵 모드: 샘플러가 알 수 없는 밉맵 모드를 사용한 경우입니다. 없음, 최단인접 및 선형 밉맵 모드만 지원됩니다.
| |
Error — 알 수 없는 래핑 모드: 샘플러가 알 수 없는 래핑 모드를 사용한 경우입니다. 클램프 및 반복 래핑 모드만 지원됩니다.
| |
Error — 알 수 없는 특수 플래그: 샘플러가 알 수 없는 특수 플래그를 사용한 경우입니다.
| |
Error — 출력 색상을 마스크 처리할 수 없음: 조각 프로그램에서 출력 색상 레지스터를 마스크 처리할 수 없습니다. 색상 레지스터의 모든 구성 요소를 설정해야 합니다.
| |
Error — 두 번째 피연산자는 샘플러 레지스터여야 함: AGAL tex opcode에서는 샘플러를 두 번째 소스 피연산자로 사용해야 합니다.
| |
Error — 간접 주소 지정이 허용되지 않음: 허용되지 않는 경우에 간접 주소 지정을 사용한 경우입니다.
| |
Error — Swizzle이 스칼라여야 함: 뒤섞기 오류입니다.
| |
Error — 두 번째 소스를 뒤섞을 수 없음: 뒤섞기 오류입니다.
| |
Error — 두 번째로 사용하는 샘플러는 매개 변수가 같아야 함: 동일한 텍스처에 액세스하는 모든 샘플러는 동일한 크기, 래핑, 필터, 특수 및 밉맵 설정을 사용해야 합니다.
| |
Error — 3768: 백그라운드에서 실행되는 동안 Stage3D API는 사용할 수 없습니다.
|
추가 정보
관련 API 요소
Tue Jun 12 2018, 03:17 PM Z