Hi! I have a DirectX program which works correctly when I launch it, but when I debug it, it gives me error in the middle of the DirectX initalyzing function: Unhandled exception at 0x004119f8 in MyProgram.exe: 0xC0000005: Access violation reading location reading 0xcccccccc.
I think that D3DXMtrl_Buffer gives problems, but I'm not absolutely sure and I don't know how to fix it.
Here's my problematic function for initalyzing DirectX:
Code:
//Globals
LPDIRECT3D9 DirX_3D = NULL;
LPDIRECT3DDEVICE9 DirX_Device = NULL;
LPD3DXMESH tiiger_mesh = NULL;
LPDIRECT3DTEXTURE9* Tekstuur = NULL;
D3DMATERIAL9* D3D_Material = NULL;
DWORD mat_nr=0L;
HRESULT hr;
void InitDirX(HWND hWnd)
{
//----------------------------------------------
// InitDirX
//----------------------------------------------
D3DPRESENT_PARAMETERS pp;
LPD3DXBUFFER D3DXMtrl_Buffer;
//Creating Direct3D object
if(NULL==(DirX_3D=Direct3DCreate9(D3D_SDK_VERSION)))
{
//error
}
ZeroMemory(&pp, sizeof(pp));
pp.Windowed= TRUE;
pp.SwapEffect= D3DSWAPEFFECT_DISCARD;
pp.BackBufferFormat= D3DFMT_UNKNOWN;
pp.EnableAutoDepthStencil = TRUE;
pp.AutoDepthStencilFormat = D3DFMT_D16;
//Creating DirectX device
hr=DirX_3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&pp,
&DirX_Device);
if(FAILED(hr))
{
//error
}
DirX_Device->SetRenderState( D3DRS_ZENABLE, TRUE );
DirX_Device->SetRenderState( D3DRS_AMBIENT, 0xffffffff );
//Loading Mesh
hr=D3DXLoadMeshFromX("Tiger.x", D3DXMESH_SYSTEMMEM,
DirX_Device, NULL,
&D3DXMtrl_Buffer, NULL, &mat_nr,
&tiiger_mesh);
if(FAILED(hr))
{
//error
}
D3DXMATERIAL* D3DX_Materials = (D3DXMATERIAL*)D3DXMtrl_Buffer->GetBufferPointer(); //In this line it gives me error!!!
D3D_Material = new D3DMATERIAL9[mat_nr];
Tekstuur = new LPDIRECT3DTEXTURE9[mat_nr];
for( DWORD i=0; i<mat_nr; i++ )
{
D3D_MaterialIdea = D3DX_MaterialsIdea.MatD3D;
D3D_MaterialIdea.Ambient = D3D_MaterialIdea.Diffuse;
TekstuurIdea = NULL;
//Creating texture
hr=D3DXCreateTextureFromFile(DirX_Device,
D3DX_MaterialsIdea.pTextureFilename,
&TekstuurIdea);
if(FAILED(hr))
{
//error
}
}
D3DXMtrl_Buffer->Release();
}
What's wrong with it?