directx初第二卷

初始化

添加头文件

#include <Windows.h>
#include <d3dx9.h>

声明变量

LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;

关键代码

//创建directx接口
if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
return E_FAIL;

//校验硬件顶点运算
D3DCAPS9 caps; int vp = 0;
//获取设备性能参数(默认(当前使用的显卡),硬件(抽象层)设备类型,把结果存到设备信息指针)
if (FAILED(g_pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps)))
{
return E_FAIL;
}
if (caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
vp = D3DCREATE_HARDWARE_VERTEXPROCESSING; //支持硬件顶点运算
else
vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //不支持(则采用软件顶点运算)

//填充D3DPRESENT_PARAMETER结构
D3DPRESENT_PARAMETERS d3dpp;
//将指定内存清零(内存地址,内存大小)
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE; //指定以Windows窗体形式显示
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; //当前屏幕绘制后它将自动从内存中删除
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; //后台缓冲区像素格式为当前使用的显卡的像素格式

//创建directx设备接口(默认(当前使用的显卡),硬件(抽象层)设备类型,当前窗口句柄,设备行为标识,已填充的结构,把结果存到设备指针)
if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
vp,
&d3dpp, &g_pd3dDevice)))
{
return E_FAIL;
}

渲染

关键代码

if (NULL != g_pd3dDevice)
{
//清空后台缓冲区(矩形数组中矩形的数量为0,无矩形数组(清空区域)指针,标识为颜色缓冲区,蓝色,像素深度值为1,像素模版值为0)
g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0);
//开始绘制
if (SUCCEEDED(g_pd3dDevice->BeginScene()))
{
//绘制
....
//结束绘制
g_pd3dDevice->EndScene();
}

//翻转显示(无复制源矩形区域的指针,无复制目标矩形区域的指针,无当前绘制的窗口句柄,无最小更新区域的指针)
g_pd3dDevice->Present(NULL, NULL, NULL, NULL); //后台渲染的东西翻转到前台
}

文章目录
  1. 1. 初始化
  2. 2. 渲染