0
Я пытаюсь написать SKYBOX шейдер в DX10, используя следующий код HLSL:DX10 Skybox Shader
//////////////////////////////////////////////////////////////////////////
// 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?
Это исправляет проблему, но дает мне эту ошибку: D3D10: ОШИБКА: ID3D10Device :: DrawIndexed: включен Rasterization Unit (PixelShader не имеет значения NULL или глубина/трафарет), но позиция не предоставляется последним шейдером до блок растеризации. [ИСПОЛНИТЕЛЬНАЯ ОШИБКА № 362: DEVICE_DRAW_POSITION_NOT_PRESENT] D3D10: ОШИБКА: ID3D10Device :: DrawIndexed: при рисовании всегда требуется шейдер Vertex, но ни один из них в данный момент не связан. [ИСПОЛНИТЕЛЬНАЯ ОШИБКА № 341: DEVICE_DRAW_VERTEX_SHADER_NOT_SET] – Simononon
Ах, D3D10 чрезвычайно подробные сообщения об ошибках. К сожалению, я не совсем понимаю, как они генерируются только из кода, который вы вставили выше; похоже, что вы оба пишете позицию в своем вершинном шейдере * и * устанавливаете шейдер в эффекте - возможно, вершинный шейдер случайно отключается в вашем коде на C++? –