direct3d9 渐变的窗口代码

原创 2015年11月19日 15:33:29


//包含Dx9的头文件
#include <d3d9.h>
#pragma warning( disable : 4996 ) //除去警告
#include <strsafe.h>
#pragma warning( default : 4996 )

//-----------------------------------------------------------------------------
// 全局参数
//-----------------------------------------------------------------------------
LPDIRECT3D9             g_pD3D = NULL; // 创建 D3DDevice
LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; // 我们使用的渲染设备

//-----------------------------------------------------------------------------
// 名称: InitD3D()
// 描述: 初始化 Direct3D
//-----------------------------------------------------------------------------
HRESULT InitD3D(HWND hWnd)
{
 // 根据版本创建D3D对象
 if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
  return E_FAIL;

 //设置参数
 D3DPRESENT_PARAMETERS d3dpp;                //参数对象,用于下面的设备创建
 ZeroMemory(&d3dpp, sizeof(d3dpp));        //用0来填充d3dpp内存区域,也就是初始化内存
 d3dpp.Windowed = TRUE;                        //设置为窗口模式
 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;    //交换缓冲支持的效果类型,指定表面在交换链中是如何被交换的。这里为后备的缓存加载之后就删除。
 d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;    //显示模式

 //创建设备驱动Direct3D
 if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,                        //默认适配器
  D3DDEVTYPE_HAL,                            //硬件驱动
  hWnd,                                        //设备所使用的窗体
  D3DCREATE_SOFTWARE_VERTEXPROCESSING,        //顶点像素渲染方式
  &d3dpp,                                    //参数
  &g_pd3dDevice                                //驱动设备
  )))
 {
  return E_FAIL;
 }

 // 初始化完成

 return S_OK;
}

//-----------------------------------------------------------------------------
// 名称: Cleanup()
// 描述: 释放所有初始化对象
//-----------------------------------------------------------------------------
VOID Cleanup()
{
 if (g_pd3dDevice != NULL)
  g_pd3dDevice->Release();

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



//-----------------------------------------------------------------------------
// 名称: Render()
// 描述: 绘制场景
//-----------------------------------------------------------------------------
VOID Render()
{
 if (NULL == g_pd3dDevice)
  return;

 //清除背景缓存并重新设置为蓝色
 g_pd3dDevice->Clear(0,                             // pRects中的矩形数,如果 pRects为NULL着该参数必须为0
  NULL,                         //一个指向D3DRECT结构体的指针
  D3DCLEAR_TARGET,             //D3DCLEAR标志,现在为清空当前的渲染器
  D3DCOLOR_XRGB(0, 0, 0),     //颜色   
  1.0f,                         // depth buffer的新z值
  0                             //模板
  );

 // 开始渲染场景
 if (SUCCEEDED(g_pd3dDevice->BeginScene()))
 {
  // 可以在这里渲染场景

  // 结束渲染
  g_pd3dDevice->EndScene();
 }

 // 清苦当前缓存中的数据
 g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}

//-----------------------------------------------------------------------------
// 名称: MsgProc()
// 描述: Windows窗体句柄
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 switch (msg)
 {
 case WM_DESTROY:
  Cleanup();
  PostQuitMessage(0);
  return 0;

 case WM_PAINT:
  Render();
  ValidateRect(hWnd, NULL);//效验矩形数据
  return 0;
 }

 return DefWindowProc(hWnd, msg, wParam, lParam);
}
void CALLBACK TimeProc(HWND hWnd, UINT nMsg, UINT nTimerid, DWORD dwTime)
{
 if (NULL == g_pd3dDevice)
  return;

 //清除背景缓存并重新设置为颜色
 g_pd3dDevice->Clear(0,                             // pRects中的矩形数,如果 pRects为NULL着该参数必须为0
  NULL,                         //一个指向D3DRECT结构体的指针
  D3DCLEAR_TARGET,             //D3DCLEAR标志,现在为清空当前的渲染器
  D3DCOLOR_XRGB(0, dwTime%256, 0),     //颜色   
  1.0f,                         // depth buffer的新z值
  0                             //模板
  );

 // 开始渲染场景
 if (SUCCEEDED(g_pd3dDevice->BeginScene()))
 {
  // 可以在这里渲染场景

  // 结束渲染
  g_pd3dDevice->EndScene();
 }

 // 清苦当前缓存中的数据
 g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}
//WinMain函数入口

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{

 //直接初始化结构体
 /*
 GetModuleHandle 函数是返回一个模块在当前进程地址空间的HMODULE
 如果函数参数值为NULL则返回一个虚拟当前句柄.
 */
 WNDCLASSEX wc = { sizeof(WNDCLASSEX),            //指定了以字节为单位的结构的大小
  CS_CLASSDC,                    //所有属于该类的窗口实例共享相同的DC
  MsgProc,                        //是指向窗口过程的指针
  0L,                            //…………
  0L,                            //…………
  GetModuleHandle(NULL),        //是指向窗口过程实例的句柄
  NULL,                            //指向窗口图标的句柄
  NULL,                            //指向窗口光标的句柄
  NULL,                            //背景刷
  NULL,                            //菜单
  "D3D Tutorial",                //类名
  NULL                            //指向小图标的句柄
 };
 //注册窗体类
 RegisterClassEx(&wc);

 //创建窗体
 HWND hWnd = CreateWindow("D3D Tutorial",                                //窗体的类名
  "D3D Tutorial 01: CreateDevice",                //标题
  WS_OVERLAPPEDWINDOW,                            //窗体风格
  100,                                            //位置坐标x
  100,                                            //位置坐标y
  300,                                            //宽
  300,                                            //高
  NULL,                                            //父窗口
  NULL,                                            //菜单
  wc.hInstance,                                    //窗体类句柄,2000以上的系统无含义!
  NULL                                            //窗体结构参数
  );
 SetTimer(NULL, 1, 1000, TimeProc);
 // Initialize Direct3D
 if (SUCCEEDED(InitD3D(hWnd)))
 {
  // Show the window
  ShowWindow(hWnd, SW_SHOWDEFAULT);
  UpdateWindow(hWnd);

  // Enter the message loop
  MSG msg;
  while (GetMessage(&msg, NULL, 0, 0))
  {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
 }

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Direct3D11深蓝色窗口演示demo

  • 2012-07-09 06:02
  • 16.25MB
  • 下载

Direct3D9 中的Gamma矫正

纹理内容常常是存在sRGB格式中的。关于这个格式的细节是可以被找到的。通常,像素管线假定颜色是线性的以便融合(blending)操作可以在线性空间中进行。因为sRGB中的内容是Gamma较正,所以融合...

Writing HLSL Shaders in Direct3D 9

Writing HLSL Shaders in Direct3D 9 Vertex-Shader Basics Pixel-Shader Basics Shader Inputs and Sha...

Precomputed Radiance Transfer (Direct3D 9)

Using Precomputed Radiance Transfer There are several forms of complexity present in interesting sc...

Representing PRT With Textures (Direct3D 9)

The PRTDemo sample and PRTCmdLine simulator included in the DirectX SDK represent transfer vectors a...

Direct3D9中的纹理演示

Direct3D9中的纹理演示

Direct3D的主窗口演示

  • 2009-10-10 11:41
  • 2.38MB
  • 下载

Using UVAtlas (Direct3D 9)

Many rendering and content generation techniques require a unique, non-overlapping map of a 2D signa...

Direct3D9 Fx/HLSL的若干条有用的笔记

Direct3D中的Shader是这样的: 1. ASM Shader是最元老的也是DX8主要使用Shader 2. fxc编译器可以同时编译ASM,HLSL和fx脚本,其中HLSL和fx可以查看...

Direct3D9的扩展纹理格式

在WinXP下,即使GPU支持D3D10+,也只能用D3D9的API。但实际上各个厂商都对D3D9做了一些扩展,把部分D3D10+的特性暴露给了D3D9 API。以下是一些特殊的纹理格式,通过FOUR...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)