2011-02-03 5 views
0

나는 다음과 같은 HLSL 코드를 사용하여 DX10의 스카이 박스 쉐이더를 작성하려고 해요 : 오류 제공DX10 스카이 박스 쉐이더

////////////////////////////////////////////////////////////////////////// 
// world matrix for each rendered object 
float4x4 g_mWorld; 

// single cubemap texture 
Texture2D g_tCubeMap; 

// basic mirror texture sampler 
SamplerState g_sSamplerMirror 
{ 
    Filter = MIN_MAG_MIP_POINT; 
    AddressU = MIRROR; 
    AddressV = MIRROR; 
}; 

////////////////////////////////////////////////////////////////////////// 
// pre-defined vertex formats for vertex input layouts 
struct VS_INPUT 
{ 
    float3 Position  : POSITION; 
}; 

struct PS_INPUT 
{ 
    float4 SPosition : SV_POSITION; 
    float3 UV   : TEXCOORD; 
}; 

////////////////////////////////////////////////////////////////////////// 
PS_INPUT VS_Default(VS_INPUT Input) 
{ 
    PS_INPUT Output = (PS_INPUT)0; 

    Output.SPosition = float4(Input.Position,1.0f); 
    Output.UV = normalize(mul(Output.SPosition, g_mWorld)).xyz; 

    return Output; 
} 

////////////////////////////////////////////////////////////////////////// 
float4 PS_Default(PS_INPUT Input) : SV_TARGET0 
{ 
    return float4(texCUBE(g_sSamplerMirror, Input.UV)); 
} 

////////////////////////////////////////////////////////////////////////// 
technique10 TECH_Default 
{ 
    pass 
    { 
     SetVertexShader(CompileShader(vs_4_0, VS_Default())); 
     SetPixelShader(CompileShader(ps_4_0, PS_Default())); 
     SetGeometryShader(0); 
    } 
} 

. "DX-9 스타일의 내장 함수가 비활성화를하지 않을 경우 DX9 호환성 모드" on line 46 :

return float4(texCUBE(g_sSamplerMirror, Input.UV)); 

texCUBE 대신 사용할 수있는 방법이 있습니까? dx9 호환 모드를 활성화하지 않고 어떻게 해결할 수 있습니까?

답변

1

Shader Model 4을 사용하고 있으므로 a TextureCube object을 생성 한 다음 call the Sample method을 생성 할 수 있어야합니다.

+0

D3D10 : 오류 : ID3D10Device :: DrawIndexed : 래스터 화 단위가 활성화되어 있습니다 (PixelShader가 NULL이 아니거나 Depth/Stencil 테스트가 활성화되어 있음). 그러나 위치는 마지막 셰이더에서 제공하지 않습니다. 래스터 화 단위. [EXECUTION ERROR # 362 : DEVICE_DRAW_POSITION_NOT_PRESENT] D3D10 : 오류 : ID3D10Device :: DrawIndexed : 꼭지점 셰이더는 드로잉 할 때 항상 필요하지만 현재 바운드되어 있지 않습니다. [EXECUTION ERROR # 341 : DEVICE_DRAW_VERTEX_SHADER_NOT_SET] – Simononon

+0

아, D3D10이 매우 자세한 오류 메시지입니다. 불행히도 나는 당신이 위에 붙여 넣은 코드로 어떻게 생성되는지를 잘 알지 못한다. 당신이 버텍스 쉐이더 *와 * 쉐이더를 이펙트에 설정하고있는 것처럼 보입니다 - 아마도 버텍스 쉐이더가 당신의 C++ 코드에서 우연히 설정되지 않았을 수 있습니다? –