2.0 내 주요 질문을 시작하려면> :픽셀 쉐이더 모델은 FireMonkey
내가 내 FireMonkey 애플리케이션에서 픽셀 쉐이더 모델 3, 4 또는 5를 사용할 수 있습니까?
내 FireMonkey 프로그램에서 픽셀 쉐이더를 동적으로 만들 수 있기를 원합니다. 그러기 위해 DirectX SDK와 함께 제공되는 fxc.exe를 사용하여 픽셀 쉐이더를 컴파일하고 컴파일 된 코드를 TShaderFilter 자손으로로드합니다. 그게 잘 작동합니다 (내가 어떻게하는지에 관심이 있다면 알려주십시오).
그러나 ps_2_0
을 대상 프로필로 사용하여 컴파일하면 작동 할 수 있습니다.
저는 현재 셰이더 모델 2.0의 제한 사항을 실행하고 있습니다. 예를 들어 루프는 컴파일러에 의해 풀려진 것처럼 보이며 레벨 2 쉐이더에서 가질 수있는 최대 명령어 수는 있습니다. 그렇기 때문에 가능성의 수는 제한되어 있습니다.
예 : 셰이더 코드는 아래 브로트 프랙탈을 생성한다. Iterations
을 너무 높게 설정하면 컴파일되지 않습니다. 오류 메시지 : 쉐이더 좀 더 반복으로 컴파일 할 수 있습니다 ps_3_0 모델,하지만 컴파일 된 쉐이더와
error X5608: Compiled shader code uses too many arithmetic instruction slots (78). Max. allowed by the target (ps_2_0) is 64.
#define Iterations 12
float2 Pan;
float Zoom;
float Aspect;
float4 main(float2 texCoord : TEXCOORD0) : COLOR0
{
float2 c = (texCoord - 0.5) * Zoom * float2(1, Aspect) - Pan;
float2 v = 0;
for (int n = 0; n < Iterations; n++)
{
v = float2(v.x * v.x - v.y * v.y, v.x * v.y * 2) + c;
}
return (dot(v, v) > 1) ? 1 : 0;
}
FireMonkey에서 작동하지 않습니다. 오류 메시지가 표시되지 않습니다. 나는 결과적으로 붉은 색 이미지를 얻는다.
여기 사람이이 문제를 해결하는 방법에 대한 어떤 생각을 가지고 있는가, 또는 FireMonkey 그냥 내 그래픽 카드의 잠재력을 최대한 활용 할 수 없음?
FireMonkey의 최소 요구 사항은 쉐이더 레벨 2.0의 그래픽 카드이지만, 쉐이더 레벨 3 이상을 사용할 수 없다는 것은 확실하지 않습니다.
+1 재미있는 질문! 나는 셰이더를 컴파일하고 사용하는 방법을 읽는 것에 흥미가있을 것이다. –