I put some code in to display FPS in the corner... but i can't seem to get it to display the FPS... i have some code in Update() and i think it should work, but im may be doing something wrong. maybe i just need a second pair of eyes
#include "settings.h"
#include <ctime>
#include <windows.h>
#include <stdio.h>
#include MakePath(DXIncludePath, d3d9.h)
#include MakePath(DXIncludePath, d3dx9.h)
// macro for user input
#define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
const char g_szClassName[] = "myWindowClass";
const char winTitle[] = "DirectX Demo";
HWND hwnd;
HINSTANCE hInstance; // Holds The Instance Of The Application
int width = 800;
int height = 600;
LPDIRECT3D9 pD3DObject;
LPDIRECT3DDEVICE9 pD3DDevice;
LPD3DXFONT pFont;
LPD3DXFONT mFont;
float FPS;
class CSprite {
public:
LPD3DXSPRITE pSprite;
LPDIRECT3DTEXTURE9 pTexture;
D3DXIMAGE_INFO imageInfo;
float zAngle, xSize, ySize, zSize;
D3DXVECTOR2 pos;
void Init(char imageFilename[]) {
D3DXCreateSprite(pD3DDevice, &pSprite);
D3DXCreateTextureFromFileEx(pD3DDevice, imageFilename, 0, 0, 0, 0,
D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT,
D3DX_DEFAULT, D3DCOLOR_ARGB(0, 0, 0, 255),
&imageInfo, 0, &pTexture);
pos = D3DXVECTOR2(0, 0);
zAngle = 0;
xSize = 1;
ySize = 1;
zSize = 1;
}
void Move(float dx, float dy)
{
pos.x += dx;
pos.y += dy;
}
void Rotate(float dAngle)
{
zAngle += dAngle;
}
void Scale(float dxs)
{
float Scale = xSize;
xSize += dxs;
ySize = xSize;
zSize = xSize;
}
void Draw() {
D3DXVECTOR3 center(imageInfo.Width/2, imageInfo.Height/2, 0);
D3DXMATRIX t, rz, c, s;
D3DXMatrixTranslation(&t, pos.x, pos.y, 0);
D3DXMatrixRotationZ(&rz, zAngle);
D3DXMatrixScaling(&s, xSize, ySize, zSize);
c = s * rz * t;
pSprite->Begin(D3DXSPRITE_ALPHABLEND);
pSprite->SetTransform(&c);
pSprite->Draw(pTexture, NULL, ¢er, NULL, D3DCOLOR_ARGB(255, 255, 255, 255));
pSprite->End();
}
CSprite() {
}
~CSprite() {
if (pSprite) {
pSprite->Release();
}
if (pTexture) {
pTexture->Release();
}
}
};
const int SpriteCnt = 6;
CSprite Sprite1[SpriteCnt];
CSprite Sprite2;
void Transformation()
{
Sprite1[0].Rotate((float)rand()/(float) RAND_MAX * 6);
Sprite1[0].Scale((float)rand()/(float) RAND_MAX * 3 - 0.5);
Sprite1[1].Rotate((float)rand()/(float) RAND_MAX * 6);
Sprite1[1].Scale((float)rand()/(float) RAND_MAX * 3 - 0.5);
Sprite1[2].Rotate((float)rand()/(float) RAND_MAX * 6);
Sprite1[2].Scale((float)rand()/(float) RAND_MAX * 3 - 0.5);
Sprite1[3].Rotate((float)rand()/(float) RAND_MAX * 6);
Sprite1[3].Scale((float)rand()/(float) RAND_MAX * 3 - 0.5);
Sprite1[4].Rotate((float)rand()/(float) RAND_MAX * 6);
Sprite1[4].Scale((float)rand()/(float) RAND_MAX * 3 - 0.5);
Sprite1[5].Rotate((float)rand()/(float) RAND_MAX * 6);
Sprite1[5].Scale((float)rand()/(float) RAND_MAX * 3 - 0.5);
}
void Init() {
// create direct3d object
pD3DObject = Direct3DCreate9(D3D_SDK_VERSION);
if (pD3DObject) {
// create direct3d device
D3DPRESENT_PARAMETERS d3dpp;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.BackBufferWidth = width;
d3dpp.BackBufferHeight = height;
d3dpp.Windowed = true;
d3dpp.hDeviceWindow = hwnd;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.EnableAutoDepthStencil = true;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
d3dpp.Flags = 0;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
pD3DObject->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hwnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&pD3DDevice);
D3DXCreateFont(pD3DDevice, 30, 0, FW_BOLD, 0, false,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE, TEXT("Times New Roman"),
&pFont);
D3DXCreateFont(pD3DDevice, 20, 0, FW_BOLD, 0, false,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE, TEXT("Times New Roman"),
&mFont);
srand (time(NULL));
Sprite1[0].Init("test.png");
Sprite1[0].pos= D3DXVECTOR2(rand() % 700 + 50, rand() % 500 + 50);
Sprite1[1].Init("test.png");
Sprite1[1].pos= D3DXVECTOR2(rand() % 700 + 50, rand() % 500 + 50);
Sprite1[2].Init("test.png");
Sprite1[2].pos= D3DXVECTOR2(rand() % 700 + 50, rand() % 500 + 50);
Sprite1[3].Init("test.png");
Sprite1[3].pos= D3DXVECTOR2(rand() % 700 + 50, rand() % 500 + 50);
Sprite1[4].Init("test.png");
Sprite1[4].pos= D3DXVECTOR2(rand() % 700 + 50, rand() % 500 + 50);
Sprite1[5].Init("test.png");
Sprite1[5].pos= D3DXVECTOR2(rand() % 700 + 50, rand() % 500 + 50);
}
}
void Update(float dt) {
static float FrameCnt = 0.0f;
static float timeElapsed = 0.0f;
FrameCnt += 1.0f;
timeElapsed += dt;
if( timeElapsed >= 1.0f )
{
FPS = FrameCnt;
timeElapsed = 0.0f;
FrameCnt = 0.0f;
}
char str[128];
sprintf(str, "GSP381 Beau Altman");
SetWindowText(hwnd, str);
}
void Render() {
pD3DDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(122, 85, 0) , 1.0f, 0);
pD3DDevice->BeginScene();
Sprite1[0].Draw();
Sprite1[1].Draw();
Sprite1[2].Draw();
Sprite1[3].Draw();
Sprite1[4].Draw();
Sprite1[5].Draw();
Sprite1[5].Rotate(.002);
char str[128];
RECT rect;
rect.left = 100;
rect.top = 100;
rect.right = 300;
rect.bottom = 120;
sprintf(str, "Transformations");
pFont->DrawText(NULL, str, -1, &rect,
DT_TOP | DT_LEFT | DT_NOCLIP , D3DCOLOR_ARGB(255,
rand() % 200 + 50,
rand() % 200 + 50,
rand() % 200 + 50
//255,
//255,
//255
));
rect.left = 5;
rect.top = 5;
rect.right = 0;
rect.bottom = 0;
sprintf(str, "FPS = %0.2f", FPS);
mFont->DrawText(NULL, str, -1, &rect,
DT_TOP | DT_LEFT | DT_NOCLIP , D3DCOLOR_ARGB(255,
255,
255,
255
));
pD3DDevice->EndScene();
pD3DDevice->Present(0, 0, 0, 0);
}
void Shutdown() {
if (pD3DDevice) {
pD3DDevice->Release();
}
if (pD3DObject) {
pD3DObject->Release();
}
}
// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE _hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc;
MSG Msg;
hInstance = _hInstance;
//Step 1: Registering the Window Class
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// Step 2: Creating the Window
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
winTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, width, height,
NULL, NULL, hInstance, NULL);
if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
Init();
Transformation();
// Step 3: The Message Loop
while(true) {
if (PeekMessage(&Msg,NULL,0,0,PM_REMOVE))
{
if (Msg.message == WM_QUIT)
{
break;
}
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
Update(0);
Render();
}
Shutdown();
return Msg.wParam;
}