Hello,
I am trying to get a shader to give an effect over sprites I draw. Currently I don't have the shader altering the sprites, I'm just trying to test that it works/compiles.
Here is my TestShader.fx:
// World * View * Projection matrix
float4x4 g_mWorldViewProjection : WORLDVIEWPROJECTION;
float4x4 g_mWorld : WORLD;
texture g_SpriteTexture; //What Sprite('s Texture) to use
sampler SpriteSampler =
sampler_state
{
Texture = <g_SpriteTexture>;
MipFilter = WRAP;
MinFilter = WRAP;
MagFilter = WRAP;
};
float4 PixelShaderFunction(float2 texCoord : TEXCOORD0) : COLOR
{
//return float4(1, 0, 0, 1); Turn every pixel red
float4 color = tex2D(SpriteSampler, texCoord);
//color.gb = color.r; //make texture GreyScale
return color;
}
technique DefaultTechnique //Renders The current Sprite as is
{
pass Pass1
{
PixelShader = compile ps_2_0 PixelShaderFunction();
}
}
Then I create it like so:
//==== Load in our shader:
LPD3DXBUFFER pErrors = NULL;
wchar_t *str1 = L"TestShader.fx";
DWORD dwShaderFlags = 0;
//Create The First Shader
if (FAILED(D3DXCreateEffectFromFile( g_pd3dDevice, str1, NULL, NULL, dwShaderFlags, NULL, &g_pTestShader, &pErrors ) ))
{
if (pErrors != NULL)
{
char *errorString = (char*)pErrors->GetBufferPointer();
printf(errorString);
MessageBox( NULL, L"Could not Create Test Shader", L"Textures1.exe", MB_OK );
//return E_FAIL;
}
//return E_FAIL;
}
Then I try to set it's Matrix, but it crashes my program. I get an error:
Unhandled exception at 0x76fc15de in Sprites.exe: 0xC0000005: Access violation reading location 0x00000000.
g_pTestShader->SetMatrix( "g_mWorldViewProjection", &Cam.GetWorldViewProj());
The above line is the only code that tries to use my shader object and it crashes it.
Any ideas why?
Thanks