2011-05-14 5 views
0

이봐, 나는 아주 간단한 문제가있다.C# 쉐이더 (HLSL) 내부의 부동 소수점을 수정하는 방법

내가 셰이더 함수 내에서 float를 변경하고 메인 프로그램 쉐이더 내 주요 기능이

float size; // THE VARIABLE... 

float4 PS_COLOR(float2 texCoord: TEXCOORD0) : COLOR 
{ 
    size = 3.0f; // AFTER THIS CALL IT SHOULD RETURN 3 IN THE MAIN PROGRAM 
    return 1.0f; 
} 

technique LangweiligerShader 
{ 
    pass pass0 
    { 
     PixelShader = compile ps_2_0 PS_COLOR(); 
    } 
} 

과 같은

로 다시 보내려고, 나는 크기 변수를 설정 like :

effect.SetValue(EffectHandle.FromString("size"), 1000f); 

그런 다음 나는 셰이더를 적용한 Draw 메서드를 호출합니다. 까끄라기 질감

그리고 그 후

내가 여기

effect.GetValueFloat(EffectHandle.FromString("size")) 

으로 크기 변수를 가져올) 흰색 인 문제는 ... 변수는 1000이지만, 3 개

어떤 제안해야한다 ?

답변

1

나는 당신이 시도하는 것이 가능하다고 생각하지 않습니다. 픽셀 쉐이더는 출력 화면 영역의 모든 픽셀에 대해 호출됩니다. 따라서 변수는 각 프레임마다 여러 번 설정됩니다. 변수가 픽셀 쉐이더 함수 내의 계산에 의존하면 많은 차이 결과가 기록됩니다.

어떤 종류의 값을 반환하는 계산에 GPU를 사용하려는 경우 CUDA 또는 OpenCL과 같은 프레임 워크를 살펴 보시기 바랍니다.

+0

constantinius가 말한 것을 반복하기 위해 일단 버텍스 셰이더와 픽셀 쉐이더에 도달하면 그래픽 카드의 내부 버퍼 내에있는 것을 처리하고 있습니다. GPU에서 '오프 로딩'이라고 생각하면됩니다. – Jay

관련 문제