⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 createdevice.cpp

📁 创建Direct3D Device 掌握Direct基础设备知识
💻 CPP
字号:
#include <d3d9.h>

#define WIN32_LEAN_AND_MEAN

LPDIRECT3D9             g_pD3D       = NULL; // 用来创建D3D设备
LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; // D3D设备
MSG msg; 
bool supportsHardwareVertexProcessing;
// 初始化D3D
HRESULT InitD3D( HWND hWnd )
{
    // 创建D3D对象
    if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;

    // 获取当前的显示模式
    D3DDISPLAYMODE d3ddm;
    if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )
        return E_FAIL;

    D3DPRESENT_PARAMETERS d3dpp; 
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;						// 窗口模式
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;	// 设置交换模式
    d3dpp.BackBufferFormat = d3ddm.Format;		// 设置背景缓冲区格式为当前左面格式

	// 创建D3D设备
	// 第一个参数:使用默认的显卡适配器
	// 第二个参数:请求使用硬件抽象层(HAL)
	// 第三个参数:窗口句柄
	// 第四个参数:使用软件处理顶点
	// 第五个参数:创建的参数
	// 第六个参数:创建的D3D设备指针
    if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, 
									  D3DDEVTYPE_HAL, 
									  hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, 
									  &g_pd3dDevice ) ) )
    {
        return E_FAIL;
    }
	//D3DCAPS9 caps;
	//g_pd3dDevice->GetDeviceCaps(&caps);
	//if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
 //   {
 //             //数据位为“on”,所以支持
 //             supportsHardwareVertexProcessing = true;
	//	      
 //   }
 //   else
 //  {
 //            //数据位为“off”,所以不支持 
 //            supportsHardwareVertexProcessing = false;
 //  }


    return S_OK;
}

// 释放D3D
VOID Cleanup()
{
    if( g_pd3dDevice != NULL) 
        g_pd3dDevice->Release();

    if( g_pD3D != NULL)
        g_pD3D->Release();
}

// 渲染
VOID Render()
{
    if( NULL == g_pd3dDevice )
        return;

    // 清除背景为兰色
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
    
    // 开始绘制场景
    g_pd3dDevice->BeginScene();
    
    // 这里绘制你需要的东西
    
    // 结束场景绘制
    g_pd3dDevice->EndScene();
    
    // 显示到屏幕上
    g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}


// 消息处理
LRESULT WINAPI WinProc( HWND hWnd, UINT msg1, WPARAM wParam, LPARAM lParam )
{
	HDC hdc;
	PAINTSTRUCT ps;
    switch( msg1 )
    {
        case WM_DESTROY:	// 退出消息
			Cleanup();
            PostQuitMessage( 0 );
			// 结束处理
			
            break;
		case WM_LBUTTONDOWN:
			//简单声音的函数
			MessageBeep(MB_ICONASTERISK);
			break;

		/*case WM_MOVE:
            MessageBeep(MB_ICONASTERISK);
			break;*/
		//case WM_MOUSEMOVE:
  //         // MessageBeep(MB_ICONASTERISK);
		//	return 0;
        case WM_PAINT:		// 绘制
			hdc = BeginPaint(hWnd,&ps);
            Render();	
//            ValidateRect( hWnd, NULL );
			EndPaint(hWnd,&ps);
            break;
		
    }

    return  DefWindowProc( hWnd, msg1, wParam, lParam );;
}

// WinMain程序入口
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
    // 注册窗口类
    WNDCLASSEX wc ;
		/*= { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, 
                      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                      "D3D Tutorial", NULL };*/
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.lpfnWndProc = WinProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.hCursor = LoadCursor(NULL,IDC_ARROW);
	wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
	wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
	wc.hInstance = hInst;
	wc.lpszClassName = "D3D Tutorial";
	wc.lpszMenuName = NULL;
	wc.style = CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW;

    RegisterClassEx( &wc );

    // 创建窗口
   /* HWND hWnd = CreateWindow( "D3D Tutorial", "D3D Tutorial 01: CreateDevice", 
                              WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
                              GetDesktopWindow(), NULL, wc.hInstance, NULL );*/
	HWND hWnd = CreateWindowEx(NULL,"D3D Tutorial","D3D Tutorial 01: CreateDevice",
		                       WS_OVERLAPPEDWINDOW | WS_VISIBLE,100,100,800,600,NULL,NULL,wc.hInstance,NULL);
    // 初始化D3D
    if( SUCCEEDED( InitD3D( hWnd ) ) )
    { 
        // 显示窗口
        ShowWindow( hWnd, SW_SHOW );
        UpdateWindow( hWnd );

        // 消息循环
        
		while(TRUE)
		{
			if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
			{
				if(msg.message == WM_QUIT)
					break;
                 TranslateMessage( &msg );
                 DispatchMessage( &msg );
			}
			//Render();
			//Game_Main();
		}

       
    }

    
    
    UnregisterClass( "D3D Tutorial", wc.hInstance );
    return 0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -