DX帧数的检测与设置
来源:互联网 发布:明星淘宝店铺链接 编辑:程序博客网 时间:2024/04/27 21:47
#define DIRECTINPUT_VERSION 0x0800
#include <d3dx9.h>
#include <dinput.h>
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
#pragma comment(lib,"dinput8.lib")
#pragma comment(lib,"dxguid.lib")
#pragma comment(lib,"winmm.lib")
#include <string>
#include <tchar.h>
#include <sstream>
#include <cmath>
#include <ctime>
using namespace std;
#pragma warning(push)
#pragma warning( disable : 4996 )
#include <strsafe.h>
#pragma warning( default : 4996 )
#pragma warning(pop)
#ifdef _UNICODE
#define TSTRING wstring
#define TSSTREAM wstringstream
#else
#define TSTRING string
#define TSSTREAM stringstream
#endif
#ifndef SAFERELEASE
#define SAFERELEASE(s) if(s){s->Release();s=NULL;}
#endif
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
#define WINDOW_CLASSNAME TEXT("CLASS")
#define WINDOW_NAME TEXT("窗口")
HWND g_hWnd=NULL;
HINSTANCE g_hInstance=NULL;
LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;
//游戏帧数
class CGameFPS
{
LPD3DXFONT m_pFont;
RECT m_rFontRect;
DWORD m_dwFrameCount;
float m_fTimeElapsed;
float m_fFps;
TCHAR m_szFpsStr[10];
public:
explicit CGameFPS();
virtual ~CGameFPS();
BOOL InitializeFPS(void);
void RenderFPS(float time);
};
CGameFPS::CGameFPS()
:m_dwFrameCount(0)
,m_fTimeElapsed(0.0F)
,m_fFps(0.0F)
{
m_pFont=NULL;
memset(&m_rFontRect,0,sizeof(RECT));
memset(m_szFpsStr,0,sizeof(m_szFpsStr));
}
CGameFPS::~CGameFPS(void)
{
SAFERELEASE(m_pFont)
}
BOOL CGameFPS::InitializeFPS(void)
{
if(FAILED(D3DXCreateFont(g_pd3dDevice,32,0,700,1,FALSE,
DEFAULT_CHARSET,OUT_TT_ONLY_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH|FF_DONTCARE,TEXT("微软雅黑"),&m_pFont)))
return FALSE;
GetClientRect(g_hWnd,&m_rFontRect);
return TRUE;
}
void CGameFPS::RenderFPS(float time)
{
m_dwFrameCount++;
m_fTimeElapsed+=time;
if(m_fTimeElapsed>=1.0F)
{
m_fFps=m_dwFrameCount/m_fTimeElapsed;
_stprintf(m_szFpsStr,TEXT("%f"),m_fFps);
m_fTimeElapsed=0.0F;
m_dwFrameCount=0;
}
m_pFont->DrawText(NULL,m_szFpsStr,-1,&m_rFontRect,DT_LEFT,D3DCOLOR_COLORVALUE(1.0F,0.0F,0.0F,1.0F));
}
//游戏帧数
CGameFPS* g_pFPS=NULL;
HRESULT InitD3D(void)
{
if(NULL==(g_pD3D=Direct3DCreate9(D3D_SDK_VERSION)))
return E_FAIL;
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;
if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,g_hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,&g_pd3dDevice)))
{
return E_FAIL;
}
g_pd3dDevice->SetRenderState(D3DRS_ZENABLE,TRUE);
g_pd3dDevice->SetRenderState(D3DRS_AMBIENT,0xFFFFFFFF);
g_pFPS=new CGameFPS;
g_pFPS->InitializeFPS();
return S_OK;
}
VOID Cleanup()
{
SAFERELEASE(g_pd3dDevice)
SAFERELEASE(g_pD3D)
}
VOID Render(float time)
{
if(NULL==g_pd3dDevice)
return;
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,255),1.0F,0);
if( SUCCEEDED(g_pd3dDevice->BeginScene()))
{
// 开始渲染场景
g_pFPS->RenderFPS(time);
// 结束渲染场景
g_pd3dDevice->EndScene();
}
g_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;
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
PostMessage(hWnd,WM_DESTROY,0,0);
break;
}
break;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
INT WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,INT)
{
WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,
GetModuleHandle(NULL),NULL,NULL,NULL,NULL,
WINDOW_CLASSNAME,NULL};
RegisterClassEx(&wc);
HWND hWnd=CreateWindowEx(WS_EX_APPWINDOW,WINDOW_CLASSNAME,WINDOW_NAME,
WS_OVERLAPPEDWINDOW,100,100,WINDOW_WIDTH,WINDOW_HEIGHT,
NULL,NULL,wc.hInstance,NULL);
g_hWnd=hWnd;
g_hInstance=wc.hInstance;
if(SUCCEEDED(InitD3D()))
{
ShowWindow(hWnd,SW_SHOWDEFAULT);
UpdateWindow(hWnd);
MSG msg;
memset(&msg,0,sizeof(MSG));
static float lastTime=(float)timeGetTime();
while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,0,0U,0U,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
float currTime=(float)timeGetTime();
float timeDelta=(currTime-lastTime)*0.001F;
Render(timeDelta);
lastTime=currTime;
Sleep(30);
}
}
}
UnregisterClass(WINDOW_CLASSNAME,wc.hInstance);
return 0;
}
- DX帧数的检测与设置
- [Unity3D]查看与设置游戏帧数FPS
- [Unity3D]查看与设置游戏帧数FPS
- [Unity3D]查看与设置游戏帧数FPS
- Flex中影片剪辑帧数的设置
- 设置DX SDK的路径
- Python 时间码与帧数的互换
- OpenGL 与 DX的争论
- OpenGL 与 DX的争论
- OpenGL 与 DX的争论
- flex 设置帧数问题
- unity 设置帧数
- Dx 10 与 Dx 9 的一些技术区别
- Linux磁盘配额的设置与检测
- https.protocols的检测与设置
- dx与px之间的转换
- 视频帧数的控制
- 帧数科普(电影与游戏)
- linux profile
- 正则表达式中的贪婪与懒惰
- IDA 远程调试
- 使用批处理文件,自动设置计算机IP地址
- 颜色
- DX帧数的检测与设置
- WPF 像VS2010 启动时加载页面的进度条
- Chrome 总是打开就崩溃原因
- IOS 字符过滤实例
- jquery博客分享一些php常用代码(四)
- (压位)高精度思想教程 与 代码实现
- HDU/HDOJ----4308 Saving Princess claire_
- 关于TCHAR
- DB2学习笔记-0002(Linux系统下卸载DB2数据库软件)