我对DX11的理解和简化框架与快速游戏制作(续4)
来源:互联网 发布:淘宝怎么设置自动回复 编辑:程序博客网 时间:2024/05/21 17:54
前面已经具备了设备层(DEVICE)显示层(SwapChain)现在就可以尝试测试显示的结果了:
添加个"SpliteDevice.h"的头文件,内容如下(注意这里也保证了语法的无关性和可读性):
很大一批程序员愿意使用gMyRenderDeviceAbstract这样的命名方式可能它根本就不想自己读懂它!
还比如#define abc(a,c){ a=c; }这种定义,程序员的智商就不能再低点嘛?这些在即使是NV的官方范例中也屡见不鲜!
一个类的名称描述应该是尽量贴近它所带来的结果。
struct SpliteDevice
{
Device device; //设备
SwapChain chain;//缓冲区
int sample,Startframe;//AA
float frameRate;//祯速率
InputState Input;//输入
void Create(Device dev,HWND hwnd,int sampleCount)
{
frameRate = 60;
sample = sampleCount;
device=dev;
chain.Create(dev,hwnd,sample);
Input.viewport=Viewport(chain.desc.Width,chain.desc.Height);//把窗口信息放在输入中便于其他下属类的访问Device.GetViewport()并不总是正确的是DX11的典型BUG
Input.hit.Zero();
LoadContent();
}
virtual void LoadContent(){}
virtual void UnLoadContent(){}
virtual void HandleInput(){}//抽象的空动作为它的下属类使用
virtual void Update(float gameTime){}
virtual void Resize(){ }
virtual void Draw(){}//绘画的抽象
void Dispose()
{
chain.Dispose();
UnLoadContent();
}
void Clear(Vector4 c) { chain.Clear(c); }
void Render()
{
DWORD tc = timeGetTime();
if ((tc - Startframe) > (1000 / frameRate))
{
Startframe = tc;
Update(1/frameRate);
Draw();
chain.Present();
}
}
//如果你真的是用游戏手柄或其他触摸设备输入的话也不必更改任何类的设定把InputState的类中增加个"Other。"的输入变量即可。
int HandleMsg(int uMsg,WPARAM wParam,LPARAM lParam)//记录所有的输入信息{
switch (uMsg)
{
case WM_CLOSE:
Dispose();
return 0;
case WM_KEYDOWN:
Input.mkeys[wParam] = true;
HandleInput();
return 0;
case WM_KEYUP:
Input.mkeys[wParam] = false;
HandleInput();
return 0;
// case WM_EXITSIZEMOVE:
case WM_SIZE:
if(wParam==SIZE_MAXIMIZED||wParam== SIZE_RESTORED)
{ chain.Resize();
Input.viewport=Viewport(chain.desc.Width,chain.desc.Height);
Resize();}
return 0;
case WM_MOUSEWHEEL:
case WM_LBUTTONUP:
case WM_MBUTTONUP:
case WM_RBUTTONUP:
case WM_LBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MOUSEMOVE:
Input.state=uMsg;
int xPos =Input.X= (short)LOWORD(lParam);
int yPos =Input.Y= (short)HIWORD(lParam);
int nMouseButtonState = (short)LOWORD(wParam);
Input.LM = ((nMouseButtonState & MK_LBUTTON) != 0);
Input.RM = ((nMouseButtonState & MK_RBUTTON) != 0);
Input.MM = ((nMouseButtonState & MK_MBUTTON) != 0);
HandleInput();
if (uMsg == WM_MOUSEWHEEL)
{
int scroll =(short)HIWORD(wParam);
if (scroll != 0)
{
Input.WheelDelta = scroll/120;
HandleInput();
Input.WheelDelta =0;
}
scroll%=120;
}
Input.PX = xPos;Input.PY = yPos;
return 0;
break;
}
return 0;
}
- 我对DX11的理解和简化框架与快速游戏制作(续4)
- 我对DX11的理解和简化框架与快速游戏制作(续)
- 我对DX11的理解和简化框架与快速游戏制作(续1)
- 我对DX11的理解和简化框架与快速游戏制作(续2)
- 我对DX11的理解和简化框架与快速游戏制作(续3)
- 我对DX11的理解和简化框架与快速游戏制作(续5)
- 我对DX11的理解和简化框架与快速游戏制作(续6)
- 我对DX11的理解和简化框架与快速游戏制作(续7)
- 我对DX11的理解和简化框架与快速游戏制作
- 支持DX11游戏对硬件的要求
- 我对分布式计算框架的理解与设计
- 我对SNS游戏的初步理解
- 我对3d游戏的理解..
- 我对快速排序的理解。
- 探讨3d游戏的制作和我对quake2--java2版本的研究
- 我对O3W框架的理解
- 浅谈我对框架的理解
- 浅谈我对框架的理解
- c语言可变参数
- 自定义的RPC的Java实现
- php+json+ajax解决中文乱码笔记
- C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- 基于ZooKeeper大规模集群配置系统概述
- 我对DX11的理解和简化框架与快速游戏制作(续4)
- extjs 2 dwr传递对象
- Python程序出炉了
- hadoop的心跳回忆
- dijkstra 求最短路径
- 基于ZooKeeper构建大规模配置系统II
- asp.net jquery 调用websercie填充GRID的问题
- c# 线程间操作无效
- showModalDialog 命令的使用