初始化Direct3D
一、Direct3D概述
二、COM
三、Direct3D初始化
一、获取接口IDirect3D9的指针
if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))return E_FAIL;
二、校验硬件顶点运算
D3DCAPS9 caps;g_pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps);int vp = 0;if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;elsevp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
三、填充D3DPRESENT_PARAMETERS结构
{
UINT BackBufferWidth; //后台缓存中表面的宽度,单位为像素
UINT BackBufferHeight; //后台缓存中表面的高度,单位为像素
D3DFORMAT BackBufferFormat; //后台缓存的像素格式
UINT BackBufferCount; //所需使用的后台缓存的个数
D3DMULTISAMPLE_TYPE MultiSampleType; //后台缓存所使用的多重采样类型
DWORD MultiSampleQuality; //多重采样的质量水平
D3DSWAPEFFECT SwapEffect; //交换链中缓存页面的置换方式
HWND hDeviceWindow; //与设备相关的窗口句柄
BOOL Windowed; //为true时,表示窗口模式,为false时,表示全屏模式
BOOL EnableAutoDepthStencil; //为true时,则Direct3D自动创建并维护深度缓存或模版缓存
D3DFORMAT AutoDepthStencilFormat; //深度缓存或模版缓存的像素格式
DWORD Flags;
/* FullScreen_RefreshRateInHz must be zero for Windowed mode */
UINT FullScreen_RefreshRateInHz; //刷新频率
UINT PresentationInterval;
} D3DPRESENT_PARAMETERS;
D3DPRESENT_PARAMETERS d3dpp;d3dpp.BackBufferWidth = width;d3dpp.BackBufferHeight = height;d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;d3dpp.BackBufferCount = 1;d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;d3dpp.MultiSampleQuality = 0;d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.hDeviceWindow = hwnd;d3dpp.Windowed = windowed;d3dpp.EnableAutoDepthStencil = true; d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;d3dpp.Flags = 0;d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
四、创建IDirect3DDevice9接口
if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,vp,&d3dpp, &g_pd3dDevice))){return E_FAIL;}
四、代码示例
#include <Windows.h>
#include <mmsystem.h>
#include <d3dx9.h>
#pragma warning( disable : 4996 ) // disable deprecated warning
#include <strsafe.h>
#pragma warning( default : 4996 )
#include <d3dx9math.h>LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;HRESULT InitD3D(HWND hWnd)
{// Step1: Create the D3D object.if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))return E_FAIL;// Step 2: Check for hardware vp.D3DCAPS9 caps;g_pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps);int vp = 0;if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;elsevp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;// Step 3: Fill out the D3DPRESENT_PARAMETERS structure.D3DPRESENT_PARAMETERS d3dpp;ZeroMemory(&d3dpp, sizeof(d3dpp));d3dpp.Windowed = TRUE;d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;d3dpp.EnableAutoDepthStencil = TRUE;d3dpp.AutoDepthStencilFormat = D3DFMT_D16;// Step 4: Create the device.if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,vp,&d3dpp, &g_pd3dDevice))){return E_FAIL;}return S_OK;
}VOID Cleanup()
{if (g_pd3dDevice != NULL)g_pd3dDevice->Release();if (g_pD3D != NULL)g_pD3D->Release();
}VOID Render()
{g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(255, 255, 0), 1.0f, 0);// Begin the sceneif (SUCCEEDED(g_pd3dDevice->BeginScene())){g_pd3dDevice->EndScene();}// Present the backbuffer contents to the displayg_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{switch (msg){case WM_DESTROY:Cleanup();PostQuitMessage(0);return 0;}return DefWindowProc(hWnd, msg, wParam, lParam);
}INT WINAPI wWinMain(HINSTANCE hInst, HINSTANCE, LPWSTR, INT)
{UNREFERENCED_PARAMETER(hInst);// Register the window classWNDCLASSEX wc ={sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,GetModuleHandle(NULL), NULL, NULL, NULL, NULL,L"D3D Tutorial", NULL};RegisterClassEx(&wc);// Create the application's windowHWND hWnd = CreateWindow(L"D3D Tutorial", L"D3D : CreateDevice",WS_OVERLAPPEDWINDOW, 100, 100, 700, 700,NULL, NULL, wc.hInstance, NULL);// Initialize Direct3Dif (SUCCEEDED(InitD3D(hWnd))){// Show the windowShowWindow(hWnd, SW_SHOWDEFAULT);UpdateWindow(hWnd);// Enter the message loopMSG msg;ZeroMemory(&msg, sizeof(msg));while (msg.message != WM_QUIT){if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)){TranslateMessage(&msg);DispatchMessage(&msg);}elseRender();}}UnregisterClass(L"D3D Tutorial", wc.hInstance);return 0;
}
初始化Direct3D相关推荐
- DirectX 9.0笔记]第一章 初始化 Direct3D
1.Direct3D概述 Direct3D的工作框架图如下图所示. 应用程序通过调用Direct3D的API来绘图,Direct3D不直接作用于图形设备,而是通过硬件抽象层(HAL,Hardware ...
- DirectX入门之初始化Direct3D及常见问题
这篇文章主要讲解如何初始化Direct3D.Direct3D初始化成功后,我们将的到一个代表显卡的C++对象(类型:IDrect3DDevice9). 初始化流程图: 完整代码: //全局变量IDir ...
- Direct3D 11 总结 —— 3 初始化 direct3D,并改变窗口颜色
介绍 创建窗口成功之后,就要使用 direct3D 进行绘图,本节主要介绍,如何初始化 direct3D,并通过 direct3D改变窗口颜色. 初始化 direct3D 函数解释 D3D11Crea ...
- DirectX教程(6):初始化Direct3D
在上一节,我们已经研究了关于Direct3D的基本概念,现在让我们开始构建一个简单的Direct3D程序,以便深入探讨实际问题.在这个程序中,我们只是初始化Direct3D,然后将其关闭.虽然内容 ...
- 一、D3D12学习笔记——初始化Direct3D
首先声明,本人是自学DX12,有很多的理解也许不到位,不过都是自己的理解.在很长一段时间里边,我从迷茫到有一天开始能看懂,现在是第三次开始刷DX12了,于是在此表明写作的初衷: 1.有一些DX12的学 ...
- 《DirectX 9.0 3D游戏开发编程基础》 第一章 初始化Direct3D 读书笔记
REF设备 参考光栅设备,他能以软件计算方式完全支持Direct3D Api.借助Ref设备,可以在代码中使用那些不为当前硬件所支持的特性,并对这此特性进行测试. D3DDEVTYPE 在程序代码中, ...
- 初始化Direct3D的基本概念
1.1Direct3D概述 Direct3D是一套底层图形API借助这个API,能够利用硬件加速功能来绘制3D场景.Direct3D可以被视作应用程序和图形设备(3D硬件)交互的中介. Direct3 ...
- 初始化Direct3D窗口
//**************************************************************************** //说明: //开发环境:Visual C ...
- Direct3D初始化代码含义
// Desc: 初始化Direct3D //----------------------------------------------------------------------------- ...
最新文章
- com.android.ide.common process ProcessException:Failed to execcue aapt
- 计算机基本水平测试内容,浙江师范大学计算机基础水平测试大纲(2018级新生使用)...
- k8s get命令:以yaml格式输出deployment对象
- Scala流程控制语句值顺序控制
- [FZYZOJ 1038] 隧道
- 【OpenCV 例程200篇】81. 频率域高斯低通滤波器
- Taro多端开发实现原理与项目实战(一)
- vue2.0中vue-router使用总结
- SpingMVC 注解@RequestMapping、@SuppressWarnings、@Scheduled 定时器
- DOM中 property 和 attribute 详解
- 计算机组成原理袁春风百度云,计算机组成原理[袁春风]chap32.pdf
- 一些经久不衰的linux 视频教程列表
- 低代码快速实现跟进提醒
- qqmail的文件中转站可真好用啊
- win10怎么设置计算机密码怎么设置,win10如何设置开机密码|win10设置登陆密码和账户的方法...
- 云计算机什么意思啊,什么叫云计算,云计算是什么,最通俗的解释是这样的
- 计算机基础技能培养,计算机基础技能培养大纲(非计算机专业).doc
- python的拼音_python 汉字按拼音排序
- 工欲善其事必先利其器-前端实习简历篇
- java动态多态性是通过什么实现的_11.java实现动态多态性是通过()实现的 答案:覆盖...
热门文章
- fastreport 横向打印多列
- 微信小程序电商项目商品详情页开发实战之数据绑定与事件应用
- 移动端(手机端)页面自适应解决方案—rem布局篇 1
- 创建两个线程,其中一个输出1-52,另外一个输出A-Z。输出格式要求:12A 34B 56C 78D 依次类推
- python的flask框架
- java用calendr做个日历,calendR :为你定制私人专属日历
- python pyqt5教程pdf_PyQt5 从零开始制作 PDF 阅读器(一)
- 吴恩达深度学习相关资源下载地址(蓝奏云)
- CString、CTime和COleDateTime转换
- 存储系统的扩展:scale out VS scale up