I did a simple pixel shader that makes the texture monochrome, and it works perfectly when it is precompiled, but not when compiled (returns E_FAIL). The effect was compiled using fxc.exe with these arguments: fxc /T ps_2_0 /Fo BasicHLSL.fxc BasicHLSL.hlsl
Here's the code
ID3DXEffect* monochromeShader = nullptr;
void initEffects(GameWindow& w)
{
long errorID =
D3DXCreateEffectFromFile
(
w.getD3DDevice(),
"data/shaders/BasicHLSL.fxc\0",
NULL,
NULL,
D3DXFX_NOT_CLONEABLE,
NULL,
&monochromeShader,
NULL
);
std::cout << std::hex << errorID;
if (monochromeShader == nullptr)
showErrorMsg(std::to_string(errorID).c_str());
}
And here's my shader before compiling with fxc.exe:
// Pixel shader input structure
struct PS_INPUT
{
float4 Position : POSITION;
float2 Texture : TEXCOORD0;
};
// Pixel shader output structure
struct PS_OUTPUT
{
float4 Color : COLOR0;
};
// Global variables
sampler2D Tex0;
PS_OUTPUT ps_main( in PS_INPUT In )
{
// Output pixel
PS_OUTPUT Out;
Out.Color = tex2D(Tex0, In.Texture);
float4 f4 = Out.Color * float4(0.299f, 0.587f, 0.114f, 1.0f);
float f = f4.r + f4.g + f4.b;
Out.Color.rgb = f;
return Out;
}
// Effect technique
technique tech_main
{
pass P0
{
// shaders
VertexShader = NULL;
PixelShader = compile ps_2_a ps_main();
}
}
Thanks for reading.