#include "StdAfx.h"
#include "D3DUtil.h"
const int Width = 640;
const int Height = 480;
LPDIRECT3D9 g_pD3D;
LPDIRECT3DDEVICE9 g_pD3DDevice;
ID3DXMesh* g_teapot;
HRESULT InitD3D(HWND hWnd)
{
//创建IDirect3D9接口,IDirect3D9主要功能是初始化等。。
g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if(!g_pD3D)
{
MessageBox(NULL, "Direct3DCreate9 -- FAILE", NULL, NULL);
return E_FAIL;
}
//检测硬件顶点运算
D3DCAPS9 cap;
if(FAILED(g_pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &cap)))
{
MessageBox(NULL, "GetDeviceCaps -- FAILE", NULL, NULL);
return E_FAIL;
}
DWORD vertexProcess = 0;
if(cap.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
{
vertexProcess = D3DCREATE_HARDWARE_VERTEXPROCESSING;
}
else
vertexProcess = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
//填充D3DPRESENT_PARAMETERS
D3DDISPLAYMODE d3dmd;
if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3dmd)))
{
MessageBox(NULL, "GetAdapterDisplayMode FAILE", NULL, NULL);
return E_FAIL;
}
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = true; //Windowed为true时为窗口模式,为false时为全屏模式
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; //交换链中缓存的页面置换方式
d3dpp.BackBufferFormat = d3dmd.Format; //后台缓存的像素格式
//创建IDirect3DDevice
if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, vertexProcess, &d3dpp, &g_pD3DDevice)))
{
MessageBox(NULL, "CreateDevice FAILE", NULL, NULL);
return E_FAIL;
}
g_pD3DDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
g_pD3DDevice->SetRenderState(D3DRS_AMBIENT, false);
return S_OK;
}
VOID SetupMatrix()
{
D3DXVECTOR3 position(0, -5.0, -5.0);
D3DXVECTOR3 taget(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMATRIX matView;
D3DXMatrixLookAtLH(&matView, &position, &taget, &up);
g_pD3DDevice->SetTransform(D3DTS_VIEW, &matView);
D3DXMATRIX proj;
D3DXMatrixPerspectiveFovLH(&proj, D3DX_PI/4, (float)Width/(float)Height, 1.0f, 1000.0f);
g_pD3DDevice->SetTransform(D3DTS_PROJECTION, &proj);
}
VOID Render(DWORD timeDelta)
{
g_pD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DXCOLOR(1.0, 1.0, 1.0, 1.0), 1.0f, 0);
g_pD3DDevice->BeginScene();
//to do sth
D3DXCreateTeapot(g_pD3DDevice, &g_teapot, NULL);
g_teapot->DrawSubset(0);
g_pD3DDevice->EndScene();
g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
}
VOID Cleanup()
{
if(g_pD3D)
{
g_pD3D->Release();
g_pD3D = NULL;
}
if(g_pD3DDevice)
{
g_pD3DDevice->Release();
g_pD3DDevice = NULL;
}
}
浙公网安备 33010602011771号