I'm trying to use shaders with C++ / DX9. Creating vertex shader works but creating pixel shader doesn't. I get "access violation reading ... 0x000000 blaa blaa"-error here:
d3ddev->CreatePixelShader((DWORD*)code2->GetBufferPointer(), &pixelShader);
Here's some code from my terrain class:
LPDIRECT3DVERTEXDECLARATION9 vertexDeclaration;
LPDIRECT3DVERTEXSHADER9 vertexShader;
LPD3DXCONSTANTTABLE constantTable;
LPDIRECT3DPIXELSHADER9 pixelShader;
...
// Now were're in constructor
vertexDeclaration = NULL;
vertexShader = NULL;
pixelShader = NULL;
constantTable = NULL;
...
/* Vertex declaration */
D3DVERTEXELEMENT9 decl[] = {
{0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
{0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
D3DDECL_END()};
d3ddev->CreateVertexDeclaration(decl, &vertexDeclaration);
/* Load shaders */
HRESULT result1 = NULL;
HRESULT result2 = NULL;
LPD3DXBUFFER code1 = NULL;
LPD3DXBUFFER code2 = NULL;
//set up Vertex Shader
result1 = D3DXCompileShaderFromFile(L"TerrainVertex.fx",
NULL,
NULL,
"vs_main",
"vs_1_1",
0,
&code1,
NULL,
&constantTable);
d3ddev->CreateVertexShader((DWORD*)code1->GetBufferPointer(), &vertexShader);
code1->Release();
//set up Pixel Shader
result2 = D3DXCompileShaderFromFile(L"TerrainPixel.fx",
NULL,
NULL,
"ps_main",
"ps_1_1",
0,
&code2,
NULL,
NULL);
/* |||||| NEXT LINE PRODUCES ACCESS VIOLATION ERROR |||||| */
d3ddev->CreatePixelShader((DWORD*)code2->GetBufferPointer(), &pixelShader);
code2->Release();