|
这是部分代码
// D3DInit.cpp: implementation of the CD3DInit class.
//
//////////////////////////////////////////////////////////////////////
#include "D3DInit.h"
IDirect3DVertexBuffer9* g_VertexBuffer = 0; //定义为全局的
//LPDIRECT3DVERTEXBUFFER9 g_VertexBuffer = NULL;
////////////定义一个顶点的结构体
struct Vertex
{
float x,y,z;
unsigned long color;
};
#define D3DFVF_VERTAX (D3DFVF_XYZ | D3DFVF_DIFFUSE) //将顶点结构体的成员变量赋值
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CD3DInit::CD3DInit()
{
g_pD3D = NULL;
g_pd3dDevice = NULL;
}
CD3DInit::~CD3DInit()
{
g_pD3D->Release();
g_pD3D = NULL;
g_pd3dDevice->Release();
g_pd3dDevice = NULL;
}
//--D3D的初始化
HRESULT CD3DInit::InitD3D(HWND hWnd)
{
//--创建D3D对象
if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
return E_FAIL; //--(E_FAIL)创建失败
D3DDISPLAYMODE d3ddm; //--定义一个保存当前适配器属性的结构
//--获得当前适配器的显示模式
if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
{
return E_FAIL; //--如果失败则返回(FAILED:失败)
}
//--设置传递给LPDIRECT3D9::CreateDevice的参数
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp)); //--把结构体清空
d3dpp.Windowed = false; //--指明不是窗口模式,而是全局独占模式
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; //--设定换页效果为丢弃后台缓存
d3dpp.BackBufferFormat = d3ddm.Format; //--色彩深度为桌面的色彩深度
d3dpp.BackBufferWidth = d3ddm.Width; //--后缓冲宽度
d3dpp.BackBufferHeight = d3ddm.Height; //--后缓冲高度
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; //--屏幕刷新率
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE; //--翻转模式
if(FAILED( g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, //--使用当前显卡作注设备
D3DDEVTYPE_HAL, //--硬件抽象层设备
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, //--用软件的方法处理
//--顶点数据参数若为D3DCREATE_HARDWARE_VERTEXPROCESSING则
//--使用硬件
&d3dpp,
&g_pd3dDevice)))
{
return E_FAIL;
}
Vertex objDATA[] = {
{420.0f,150.0f,0.5f,D3DCOLOR_XRGB(255,255,255)},
{420.0f,350.0f,0.5f,D3DCOLOR_XRGB(255,255,255)},
{220.0f,150.0f,0.5f,D3DCOLOR_XRGB(255,255,255)},
{220.0f,350.0f,0.5f,D3DCOLOR_XRGB(255,255,255)},
};
g_pd3dDevice->CreateVertexBuffer(sizeof(objDATA),0,D3DFVF_VERTAX,D3DPOOL_DEFAULT,&g_VertexBuffer,NULL);
void * ptr;
g_VertexBuffer->Lock(0,sizeof(objDATA),(void **)&ptr,0);
memcpy(ptr,objDATA,sizeof(objDATA));
g_VertexBuffer->Unlock();
return S_OK;
}
//--D3D的渲染部分
void CD3DInit::Render()
{
if(NULL == g_pd3dDevice)
return;
//--将填充后台缓冲区置为黑色
g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0),1.0f,0);
g_pd3dDevice->BeginScene(); //--开始通知显卡要进行渲染
g_pd3dDevice->SetStreamSource(0,g_VertexBuffer,0,sizeof(Vertex));
g_pd3dDevice->SetFVF(D3DFVF_VERTAX);
g_pd3dDevice->DrawPrimitive(D3DPT_LINELIST,0,2);
//--中间将来是整个图形的绘制部分
g_pd3dDevice->EndScene(); //--结束图形的渲染
g_pd3dDevice-> resent(NULL, NULL, NULL, NULL);//--翻页
}
BOOL CD3DInit::GameInit(HWND hWnd)
{
if(SUCCEEDED(this->InitD3D(hWnd)))
{
return true;
}
else
{
return false;
}
return true;
}
|
|