Original Post
Hi,
I am just starting on Direct3D in Directx 8.0. I have written a simple D3D window(windowed mode). Whenever I seem to execute it -it gives me an access violation. The following is my code :-
I can''t figure out what I am doing wrong. If I keep the RenderScene function empty its ok, but as soon as I have something in that function it gives some kind of illegal operation. If it helps I am using Dev-c++.
Thank you.
LPDIRECT3D8 g_d3d;
LPDIRECT3DDEVICE8 g_d3d_device;
HRESULT g_hr;
D3DXMATRIX mat;
bool Initialize_Everything(void)
{
D3DDISPLAYMODE display;
D3DPRESENT_PARAMETERS d3d_params;
g_d3d = Direct3DCreate8(D3D_SDK_VERSION);
if(g_d3d == NULL) {
ERROR_BOX(g_Hwnd, "Couldn''t create Direct3D");
return false;
}
g_hr = g_d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &display);
if(FAILED(g_hr)) {
ERROR_BOX(g_Hwnd, "GetAdapterDisplayMode failed");
return false;
}
ZeroMemory(&d3d_params, sizeof(d3d_params));
d3d_params.Windowed = true;
d3d_params.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3d_params.BackBufferFormat = display.Format;
d3d_params.BackBufferWidth = display.Width;
d3d_params.BackBufferHeight = display.Height;
g_hr = g_d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
g_Hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3d_params, &g_d3d_device);
if(FAILED(g_hr)) {
ERROR_BOX(g_Hwnd, "Failed to Create Device");
return false;
}
D3DXMatrixPerspectiveFovLH(&mat, D3DX_PI/6, WINDOW_WIDTH/WINDOW_HEIGHT, 1.0, 100.0);
g_d3d_device->SetTransform(D3DTS_PROJECTION, &(D3DMATRIX)mat);
D3DXMatrixIdentity(&mat);
g_d3d_device->SetTransform(D3DTS_WORLD, &(D3DMATRIX)mat);
D3DXMatrixTranslation(&mat, 0, 0, 10.0);
g_d3d_device->SetTransform(D3DTS_VIEW, &(D3DMATRIX)mat);
g_d3d_device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
return true;
}
bool RenderScene(void)
{
g_d3d_device->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
//g_d3d_device->BeginScene();
// draw everything here
//g_d3d_device->EndScene();
g_d3d_device->Present(NULL, NULL, NULL, NULL);
return true;
}
bool Release_Everything(void)
{
// release all device in opposite order of its initialization
if(g_d3d_device)
g_d3d_device->Release();
g_d3d_device = NULL;
if(g_d3d)
g_d3d->Release();
g_d3d = NULL;
return true;
}