2012-12-13 6 views
0

나는 레지스터에 대해 약간 혼란스러워합니다. 이 문서의 Adboe AGAL이 레지스터에 대해 혼동을 못했습니다.

, http://www.adobe.com/devnet/flashplayer/articles/what-is-agal.html

이 첫 번째 줄은 연산 레지스터에 계산 결과를 넣어

m44 op, va0, vc0 
mov v0, va1 

두 라인 AGAL 코드를 가지고 있지만, 두 번째 줄은 에게 연산 레지스터를 작동하지 않았다,

첫 번째 줄을 수행하는 의미는 무엇입니까?

또한 나는 데모 발견 vertexShader에서

//compile vertex shader 
var vertexShader:Array = 
    [ 
    "dp4 op.x, va0, vc0", //4x4 matrix transform from 0 to output clipspace 
    "dp4 op.y, va0, vc1", 
    "dp4 op.z, va0, vc2", 
    "dp4 op.w, va0, vc3", 
    "mov v0, va1.xyzw" //copy texcoord from 1 to fragment program 
    ]; 
var vertexAssembler:AGALMiniAssembler = new AGALMiniAssembler(); 
vertexAssembler.assemble(flash.display3D.Context3DProgramType.VERTEX, vertexShader.join("\n")); 

//compile fragment shader 
var fragmentShader:Array = 
    [ 
    "mov ft0, v0\n", 
    "tex ft1, ft0, fs1 <2d,clamp,linear>\n", //sample texture 1  
    "mov oc, ft1\n" 
    ]; 

, 세 가지 라인이 또한 연산에 reslut을 넣어하지만, 네 번째 줄은 ALOS를 사용하지.

그게 무슨 뜻입니까?

감사

답변

1

첫번째 줄은 단순히 현재의 정점 위치 및 모델 - 뷰 - 프로젝션 행렬을 곱하여 출력 레지스터에 그 결과를 기록한다.

두 번째 줄은 다양한 레지스터를 사용하여 일부 데이터를 픽셀 쉐이더로 전달합니다. 이 두 라인은 모두 볼 수있는 코드이므로, va1에는 텍스처 UV 좌표가 포함되어 있다고 말할 수 있습니다.

+0

예, 첫 번째 줄과 두 번째 줄 사이에 연결이 없습니까? 마침내 GPU가 op 및 oc 레지스터에서 데이터를 조작 할 것이라고 해석 할 수 있습니까? 두 번째 데모에서 vertexShader의 3 행을 이미 계산 한 다음 op에 결과를 넣습니다. 네 번째 행은 fragmentShader에서 사용할 데이터를 v0에 넣고 fragmentShader에서 모든 데이터를 oc에 저장합니다. 해당 GPU가 op 및 oc에서 데이터를 실행할 수있게 된 후에? 내가 올바르게? 덕분에 – Tunied

+0

연결이 없으므로 두 줄이 다른 작업을 수행합니다. 픽셀 쉐이더와 버텍스 쉐이더 모두 GPU에서 버텍스 쉐이더> 버텍스 클리핑 (GPU 내부에서 수행)> 픽셀 쉐이더 순서로 실행됩니다. 따라서 GPU는 첫 번째 버텍스 쉐이더가 실행 된 시점부터 모든 작업을 수행합니다. – Varnius

관련 문제